UWP 是微软在 Windows 10 中引入的新概念,由于所有 UWP 应用均运行在被称为 App Container 的虚拟沙箱环境中,其安全性及纯净度远胜于传统的 EXE 应用。但 App Container 机制同时也阻止了网络流量发送到本机(即 loopback), 使大部分网络抓包调试工具无法对 UWP 应用进行流量分析。同样的,该机制也阻止了 UWP 应用访问 localhost,即使你在系统设置中启用了代理,也无法令 UWP 应用访问本地代理服务器。

我主要用到的UWP应用也就邮件和office全家桶,邮件在收到google或者twitter等等的邮件的时候,邮件内的图片通常加载不出来,还有就是office全家桶偶尔出现的同步便秘,代理上网也就成为刚需了。

其实 Windows 10 自带了一款名CheckNetIsolation的命令行工具可以帮助我们将 UWP 及 Windows 8 Metro 应用添加到排除列表。

CheckNetIsolation.png

使用方法如图,简单明了,添加白名单,删除白名单,清除白名单,列出白名单。
需要注意的是SID,这个SID在注册表HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings下,所有的子项名就是SID

注册表.png

找到想要代理的uwp应用,复制其SID,然后执行

CheckNetIsolation.exe loopbackexempt -a -p="$SID"

指定应用.png

提示完成就大功告成了。

当然在这么多应用里面找想代理的应用也不容易,下面是一个脚本,一键把所有的uwp应用加入白名单中

Get-ChildItem "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings" |
ForEach-Object { 
 Write-Host -ForegroundColor Yellow "Start uwp proxy:" }{
  $values = Get-ItemProperty $_.PSPath;
  $uwpDisplayName = $values.DisplayName
  $arr = ($_.Name -split "\\")
  $uwpSid = $arr[$arr.count - 1]
  $uwpSid
  Write-Output "$uwpDisplayName  $uwpSid"

  CheckNetIsolation.exe loopbackexempt -a -p="$uwpSid"

 }{Write-Host -ForegroundColor Yellow "Finished!"}

新建文档,复制脚本进去,再把后缀改为.ps1,用管理员身份打开powershell,然后执行该脚本即可。

所有应用.png