我正在编写一个Winform的(C#.NET)应用程序来更改Windows的全局(也称为Internet Explorer的)代理设置。
我正在使用这个。
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", "127.0.0.1:8080");
但是它的表现很奇怪。我用两个浏览器测试了一下。
- Google Chrome:
当我在Chrome运行时更改/禁用代理时,Chrome仍然使用先前的代理。更改没有影响其进程。但是当我只是打开Internet Options(inetcpl.cpl)> Connections > LAN Settings
时,之前的代理更改现在被考虑在内了。当我说“只是打开”时,我真的是指“只是打开”。我是指,不编辑或单击任何其他按钮。我猜,这时全局代理才真正被更改(通过从注册表中读取),而Google Chrome立即生效。
- Internet Explorer 8:
使用Internet Explorer的情况要糟糕得多。在我的应用程序中更改/禁用代理后,即使在“Internet Options(inetcpl.cpl)> Connections > Lan Settings”中操作后,正在运行的IE代理也没有受到影响。即使我在新标签页中打开新链接也不行。我必须重新启动IE才能使更改生效。
我想要的行为是,每当我在我的应用程序中更改代理设置时,所有正在使用全局代理的浏览器(无论它们是否正在运行)都应该立即合并更改的设置。
我该如何实现这一点?