![在批处理脚本中更改注册表值后如何强制更新代理设置?](https://linux22.com/image/1563982/%E5%9C%A8%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%9B%B4%E6%94%B9%E6%B3%A8%E5%86%8C%E8%A1%A8%E5%80%BC%E5%90%8E%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E6%9B%B4%E6%96%B0%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%EF%BC%9F.png)
在批处理脚本中,我更新注册表值使用REG
命令禁用手动代理。
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
然而,这直到我打开代理设置才生效Windows 中的页面 (开始菜单 > 更改代理设置)。我所要做的就是打开页面,属性就会正确更新。
有没有办法在不打开网络设置的情况下重新加载/更新此设置?
答案1
此链接表明无法做到这一点:https://superuser.com/a/944980/916597。
不幸的是,没有简单的方法。正如你所注意到的,你缺少神奇的“立即读取这些设置”命令:
请注意,在链接中,答案提到可能有一种方法可以在 PowerShell 中执行此操作,但这并不能回答这个问题。不过,如果您感兴趣,请去查看。
答案2
使用 vbs 脚本启用/禁用代理时我遇到了同样的问题。
我刚刚添加了这个:
Shell.运行“ms-settings:网络代理”
WScript.睡眠 1000
Shell.Run“taskkill /f /im SystemSettings.exe”,,True
它会打开代理设置,等待 1 秒,然后关闭它。这将确保您的代理更改有效。
答案3
我创建了简单的 CLI 工具,用于强制重新加载 IE 代理设置。它调用 WININET.DLL InternetSetOption 函数,如下所述: https://superuser.com/a/944980/916597
从这里下载: https://gofile.io/?c=ol4zE7
在 W7 和 W10 上测试过。
答案4
需要强制更新系统设置,iexplore 会为您完成:
REM 在一个文件中启用/禁用系统代理
@echo 关闭
设置 home_key="HKCU\Software\Microsoft\Windows\CurrentVersion\Internet 设置"
FOR /F “tokens=3” %%L IN ('reg query %home_key% /v ProxyEnable') DO SET currentProxy=%%L
如果 %currentProxy% == 0x1 则关闭
如果 %currentProxy% == 0x0 则转到开启
:关
reg 添加 %home_key% /v ProxyEnable /t REG_DWORD /d 0 /f
SET proxy="代理已禁用"
转到 EOF
:打开
reg 添加 %home_key% /v ProxyEnable /t REG_DWORD /d 1 /f
SET proxy="代理已启用"
转到 EOF
:EOF REM 重新启动 Internet Explorer 以使更改生效
启动/w/b iexplore.exe
超时 2 /nobreak
taskkill /f /im iexplore.exe
回显%代理%