我需要设置一个自动配置脚本来设置代理。
当我通过局域网设置执行此操作时,一切正常,Chrome立即意识到更改。我尝试通过更改注册表项Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- > AutoConfigURL
来复制此行为,但Chrome在更改后几分钟才知道更改(不确定原因)。
我的下一次尝试是使用Winapi,但我找不到如何设置此脚本。我发现读取函数WinHttpDetectAutoProxyConfigUrl
运行良好,但我找不到写入等效。
如何使用Winapi设置autoproxy脚本?
我有一个部分答案(仅用于设置autoproxy)。注册表修改后,必须调用InternetInitializeAutoProxyDll
。
这是一个示例代码:
[DllImport("wininet.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int InternetInitializeAutoProxyDll(uint dwReserved);
// ...
registryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
// Setup the registry value:
registryKey.SetValue("AutoConfigURL", "http://the/config/path");
// Tell Windows to initialize the proxy:
if (InternetInitializeAutoProxyDll(0) == 0)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
但是,在取消设置代理时它不起作用:
registryKey.DeleteValue(AutomaticProxyRegistryName);
// Does nothing:
if (InternetInitializeAutoProxyDll(0) == 0)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
我建议通过WinINet API做一切,而不是直接摆弄注册表。有关如何使用C#执行此操作的信息,请参阅Programmatically Set Browser Proxy Settings in C#。 here也可以找到该问题中提到的代码。
编辑
这个例子也提到了注册表的问题。我有一个程序的uploaded部分,显示如何使用WinINet调用执行所有操作。不幸的是,该程序是用Delphi编写的,因此您可能需要将其转换为C#。重要的是在设置新值之前始终重置代理设置。