是否可以设置和取消设置autoproxy(WPAD)并将配置“应用”到系统中?

问题描述 投票:0回答:2

我需要设置一个自动配置脚本来设置代理。

当我通过局域网设置执行此操作时,一切正常,Chrome立即意识到更改。我尝试通过更改注册表项Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings - > AutoConfigURL来复制此行为,但Chrome在更改后几分钟才知道更改(不确定原因)。

我的下一次尝试是使用Winapi,但我找不到如何设置此脚本。我发现读取函数WinHttpDetectAutoProxyConfigUrl运行良好,但我找不到写入等效。

如何使用Winapi设置autoproxy脚本?

c# winapi proxy
2个回答
0
投票

我有一个部分答案(仅用于设置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());
}

0
投票

我建议通过WinINet API做一切,而不是直接摆弄注册表。有关如何使用C#执行此操作的信息,请参阅Programmatically Set Browser Proxy Settings in C#here也可以找到该问题中提到的代码。

编辑

这个例子也提到了注册表的问题。我有一个程序的uploaded部分,显示如何使用WinINet调用执行所有操作。不幸的是,该程序是用Delphi编写的,因此您可能需要将其转换为C#。重要的是在设置新值之前始终重置代理设置。

© www.soinside.com 2019 - 2024. All rights reserved.