Windows 8 Metro App 无法联网问题-代理问题
背景
最近又开始搞Windows 8 的开发,兴高采烈地下载Demo去,构建部署运行顺带用Nuget下载缺少的库,一路向西。
运行Demo的时候,居然连不上网,一惊!打开应用商店,财经,体育,全部都连不上网,我和我的小伙伴们都惊呆了!我的桌面程序应用全部都妥妥的啊!
上网找了一圈,发现会多人都出现这个问题。
原因:
主要是“代理和VPN”的设置影响的。由于实施了网络隔离,所有Metro App 默认就不能使用IP环回地址进行进程间通讯。我的理解是:使用了一些奇奇怪怪的VPN或者代理之后,这些VPN或者代理会设置本地全局代理,使得Metro App也使用本地代理。但是Metro App又不能访问本地IP,所以就扑街了。
我现在要开发啊!要调试啊!这个问题必须解决!而且我要能连接本地也能连接外部IP的解决方案。
已尝试的办法
我一直都没用使用VPN,所以我尝试的方法都是与代理有关的,但是效果都不怎样
没用!!但是如果想试试也可以
[Download Windows Store Apps Troubleshooter for Windows 8]
[Download Microsoft Accounts Troubleshooter for Windows 8]
打开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>"
通过使用CheckNetIsolation.exe【安装位置: C:\Windows\SysWOW64\CheckNetIsolation.exe 】可以指定某个APP是否解除网络隔离。想要具体应用的名字可以在
C:\Users\<你的用户名>\AppData\Local\Packages
下看到,文件夹名就是应用对应的名字。用法:
添加豁免:
CheckNetIsolation.exe LoopbackExempt -a -n=应用文件夹名
删除豁免:
CheckNetIsolation.exe LoopbackExempt -d -n=应用文件夹名
列出所有免除网络隔离的AppContriner:
CheckNetIsolation.exe LoopbackExempt -a -s
清楚所有豁免:
CheckNetIsolation.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
通过CheckNetIsolation.exe就可以使用本地代理了。连上8087的G-o-A-g-e-n-t之后,应用商店就可以联网了!但是,又出现另外一个问题:
- 使用G-o-A-g-e-n-t本地IP的服务访问不了
- 不使用G-o-A-g-e-n-t外部IP的服务访问不了
网上提示可以设置G-o-A-g-e-n-t配置文件为0.0.0.0
,简单尝试了一下,不行。
最终方案:Fiddler2
在测试上面的方案的时候已经试过Fiddler2,但是没有深究。
今天杰哥一句“用fiddler做代理,fiddler的原理不就是自建代理吗?”真一言惊醒梦中人啊!
一点四十分了,不写了。。
解决办法自己看吧。。Windows 8 Metro Apps Proxy settings with fiddler2
- Install fiddler
- Now please install this addon
- Open fiddler and click on Win8 config, then click "Excempt All"
- Restart your system
- Set the proxy details in proxyfier or proxyfire
- Always open fiddler first and you can use it in tray with CTRL+M, then proxyfier(remove from startup)