C#以编程的方式修改注册表更改Windows全局自动代理脚本(PAC)
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); registryKey.SetValue("AutoConfigURL", "这个地方填自动代理脚本的Uri"); //registryKey.SetValue("ProxyEnable", 0);
注释掉的那一行表示全局代理启用则需要关掉否则全局自动代理脚本不起作用,我的测试Chrome是这样
自动代理脚本的MIME类型一定要正确
application/x-ns-proxy-autoconfig
假如立即生效还需要调用一个本机Api刷新一下,我贴一下整体代码
public static class SetProxy { [DllImport("wininet.dll")] static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); const int INTERNET_OPTION_SETTINGS_CHANGED = 39; const int INTERNET_OPTION_REFRESH = 37; static void FlushOs() { InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); } static RegistryKey OpenKey() { return Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); } public static void Set(Uri uri) { RegistryKey registryKey = OpenKey(); registryKey.SetValue("AutoConfigURL", uri.AbsoluteUri); //registryKey.SetValue("ProxyEnable", 0); FlushOs(); }
假如要设置全局代理而不是全局自动代理脚本则需要这样
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); registryKey.SetValue("ProxyEnable", 1); registryKey.SetValue("ProxyServer", "127.0.0.1:1080");
浙公网安备 33010602011771号