,我有以下这里的代码片段,即时通讯试图建立自动更改代理服务器设置:修改代理设置
public class ProxyManager
{
public static bool UnsetProxy()
{
return SetProxy(null);
}
public static bool SetProxy(string Ip,int Port)
{
return SetProxy(Ip + ":" + Port.ToString());
}
public static bool SetProxy(string ProxyAddress)
{
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
if (ProxyAddress == null)
{
registry.SetValue("ProxyEnable", 0);
}
else
{
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", ProxyAddress.ToString());
}
//Force the update!
registry.Clase();
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
return true;
}
[DllImport("wininet.dll")]
public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
public const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
public const int INTERNET_OPTION_REFRESH = 37;
}
但由于某些原因的代理服务器设置没有被设置的,我知道方法正在被正确执行,因为我在调用该方法后将事件插入到事件管理器中,并且该方法是可见的。
出于某种原因,尽管代理设置都没有,I'me调用像这样的功能:
EventManager.WriteEntry("Proxy Settings Enabled");
ProxyManager.SetProxy("10.222.62.65:8080");
我的应用程序是一个Windows服务和本地系统账户的授权下所运行的拥有完整的权限。
@罗伯特:有了'标准用户',你的意思是你自己的账户?你如何检查设置是否被改变? – 2011-02-03 13:11:28
在多个帐户下运行服务后,断开以太网电缆,等到我在事件查看器中看到消息,说明代理已更改,然后直接检查注册表和IE代理设置,并查看没有更改。 – RobertPitt 2011-02-07 15:51:46