Windows 代理更改:应用为何沿用旧路径
已存储的 Internet Settings 值、客户端重新读取的配置和既有连接可能彼此不一致,而注册表写入并未失败。
Windows 设置窗口可能显示新的代理,而某个应用仍在走原来的路径。先确定你观察的是哪一种状态:
| 观察 | 它能确定什么 |
|---|---|
| 新值已存储 | 所选的用户或计算机配置发生了变化 |
| 客户端读取了新配置 | 该客户端已刷新它使用的来源 |
| 新连接使用了新路径 | 刷新后的策略影响了新的路由决策 |
WinINet 为每个连接提供 Internet Options 和通知,包括 INTERNET_OPTION_SETTINGS_CHANGED 和 INTERNET_OPTION_REFRESH。对于正在更新的设置,应使用受支持的配置 API,并报告其错误。仅写入注册表可能让客户端保留过时的视图;通用的设置广播并不会迫使每个网络库重新读取它。
接下来确定受影响应用的协议栈和账户。对于 .NET 9 Windows 客户端,系统代理的刷新生命周期与显式代理对象和环境默认值不同。WinHTTP 以及使用私有代理设置的客户端属于另外的情况。在当前用户下所做的更改,几乎说明不了以其他账户运行的服务;WinINet 刷新也无法为任意套接字提供代理支持。
最后,要把新建连接与更早建立的现有连接或隧道区分开。更改设置并不会自动迁移那条流。对外提供代理更改的应用,需要明确的保存、通知和新连接策略。