解决开启代理时无法正常使用Microsoft Store, OneDrive, Outlook等应用的问题
解决开启代理时无法正常使用Microsoft Store, OneDrive, Outlook等应用的问题
问题成因
开启代理后,应用的流量都应发送到localhost:代理端口
,然后由代理服务器处理这些流量,完成网络访问。然而,Microsoft Store、OneDrive、Outlook等Windows UWP应用基于AppContainer环境运行,天生具有网络隔离(无法将流量发送到代理端口),因此在开启代理时无法正常上网。
因此解决方法自然就是——解除网络隔离(启用Loopback功能)。下面提供两种方案:
一、使用工具Enableloopback.exe进行设置
Enableloopback.exe是Fiddler软件的组成部分。网络上已经有分享该软件的链接。
下载后,双击启动Enableloopback.exe
,在如下的界面中勾选在你的电脑上出现问题的应用,并点击“Save Changes”。然后重新启动Windows UWP应用,即可正常使用。
例如,勾选“Microsoft Store”:
OneDrive, Outlook等应用需要勾选“你的账户”、“工作或学校账户”,如下图所示:
二、使用Windows系统自带的CheckNetIsolation.exe启用应用的Loopback
启用应用的Loopback后即可让其流量通过代理。
以管理员身份启动CMD(默认在C:\Windows\System32目录下)。
CheckNetIsolation.exe在C:\Windows\System32目录中,为方便地使用它,如果CMD启动后在其他目录,则应进入C:\Windows\System32目录:
cd C:\Windows\System32
然后,输入命令以启用Loopback。设要启用Loopback的应用的序列号为APP_ID
:
CheckNetIsolation.exe LoopbackExempt –a –p=APP_ID
万一后悔了还可以禁用Loopback:
CheckNetIsolation.exe LoopbackExempt –d –p=APP_ID
从哪里获得APP_ID
呢?以“Microsoft Store”为例,在注册表编辑器中,HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer
项下查找应用名“Microsoft Store”:
即可得到其APP_ID
。
Loopback启用方法
Loopback启用方法
探索:Enableloopback.exe源码
请访问源码地址以获取C#源码。Enableloopback.exe是在此项目基础上改造而来的,通过源码可以发现,通过两个函数NetworkIsolationEnumAppContainers
和NetworkIsolationSetAppContainerConfig
分别实现获取电脑中基于AppContainer运行的应用列表和设置Loopback启用状态。这两个函数的调用请参阅:
NetworkIsolationSetAppContainerConfig
NetworkIsolationEnumAppContainers
进阶学习参考
AppContainer概念、C#例程
AppContainer隔离
MSIX AppContainer 应用
更多知识可以直接在微软官方学习文档中搜索。