Windows 8 Metro App 无法联网问题-代理问题


背景

最近又开始搞Windows 8 的开发,兴高采烈地下载Demo去,构建部署运行顺带用Nuget下载缺少的库,一路向西。

桌面程序应用全部都妥妥的啊!

上网找了一圈,发现会多人都出现这个问题。

原因:

“代理和VPN”的设置影响的。由于实施了网络隔离,所有Metro App 默认就不能使用IP环回地址进行进程间通讯。我的理解是:使用了一些奇奇怪怪的VPN或者代理之后,这些VPN或者代理会设置本地全局代理,使得Metro App也使用本地代理。但是Metro App又不能访问本地IP,所以就扑街了。

我现在要开发啊!要调试啊!这个问题必须解决!而且我要能连接本地也能连接外部IP的解决方案。

已尝试的办法

代理有关的,但是效果都不怎样

  • 下载微软提供的Windows Store 和Windows Account修复程序

没用!!但是如果想试试也可以  [Download Windows Store Apps Troubleshooter for Windows 8]  [Download Microsoft Accounts Troubleshooter for Windows 8]

  • 还原IE代理设置的一些基本方法

打开IE,依次选择 Internet选项 --> 连接 --> 局域网设置(L) --> 检查 代理服务器 栏,取消勾选"为LAN使用代理服务器(这些设置不用于拨号或VPN连接)(X)"。如果没有勾选,并且你是使用拨号连接或宽带连接或VPN连接的,请返回上一个窗口。在 拨号或虚拟专用网络设置 栏,选中你正在使用的连接,比如 宽带连接 ,然后单击 设置,再次查看 代理服务器 栏,是否有勾选"为LAN使用代理服务器(这些设置不用于拨号或VPN连接)(X)",如果有,请取消勾选。

Win键+X键,选择 命令提示符(管理员)(A),即以管理员身份运行CMD命令提示符,依次输入以下命令

netsh winhttp import proxy source=ie

  • 使用注册表文件配置客户端代理服务器设置

主要是设置成无代理,但是效果其实和前面一个方法一样的

【NoProxy.reg】 REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyEnable"=dword:00000000

另外也提提通过注册表设置代理的方式

【ProxyPort8087.reg】 Regedit4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "MigrateProxy"=dword:00000001 "ProxyEnable"=dword:00000001 "ProxyHttp1.1"=dword:00000000 "ProxyServer"="http://ProxyServername:80" "ProxyOverride"="<local>"

  • 解除Win8的Metro应用的网络隔离

通过使用CheckNetIsolation.exe【安装位置: C:\Windows\SysWOW64\CheckNetIsolation.exe 】可以指定某个APP是否解除网络隔离。想要具体应用的名字可以在C:\Users\<你的用户名>\AppData\Local\Packages下看到,文件夹名就是应用对应的名字。

用法:

CheckNetIsolation.exe LoopbackExempt -a -n=应用文件夹名CheckNetIsolation.exe LoopbackExempt -d -n=应用文件夹名CheckNetIsolation.exe LoopbackExempt -a -sCheckNetIsolation.exe LoopbackExempt -c

除了指定AppContainer的名字之外还可以使用指定ID的方式,但是不方便就不介绍了。我还写了一个简单的PowerShell脚本,一次添加所有豁免

$a = "-a" $n = "-n=" $loop = "LoopbackExempt" Foreach ($Item in Get-Childitem C:\Users\lenovo\AppData\Local\Packages -name ) { $nn = $n+$Item $allarg = ($loop , $a ,$nn) Write-Host $Item & "C:\Windows\SysWOW64\CheckNetIsolation.exe" $allarg }

如果不想碰代码的人,还有一个办法:MetroProxy.非常简单,原理和调用CheckNetIsolation.exe一样的。估计就是将CheckNetIsolation.exe封装了一下,写了个GUI。

不完美的方案: G-o-A-g-e-n-t

但是,又出现另外一个问题:

  1. 使用G-o-A-g-e-n-t本地IP的服务访问不了
  2. 不使用G-o-A-g-e-n-t外部IP的服务访问不了

0.0.0.0,简单尝试了一下,不行。

最终方案:Fiddler2

在测试上面的方案的时候已经试过Fiddler2,但是没有深究。

“用fiddler做代理,fiddler的原理不就是自建代理吗?”真一言惊醒梦中人啊!

一点四十分了,不写了。。

解决办法自己看吧。。Windows 8 Metro Apps Proxy settings with fiddler2

  1. Install fiddler
  2. Now please install this addon
  3. Open fiddler and click on Win8 config, then click "Excempt All"
  4. Restart your system
  5. Set the proxy details in proxyfier or proxyfire
  6. Always open fiddler first and you can use it in tray with CTRL+M, then proxyfier(remove from startup)