Я тестировал свое приложение на 32-битной версии, и оно работает нормально, но как только оно переключается на 64-битную ОС, возникает проблема
, он меняет прокси один раз, но никогда большесохраняет и проверяет один и тот же прокси для остальной части циклав 64-битной среде [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); public bool Is64Bit() { bool retVal; IsWow64Process(System.Diagnostics.Process.GetCurrentProcess().Handle, out retVal); return retVal; } Microsoft.Win32.RegistryKey registry; if (Is64Bit()) { MessageBox.Show("Oh HO! you are running 64 bit version"); registry = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); } else { MessageBox.Show("Yes it is 32 bit"); registry = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); } string orignalProxyServer = registry.GetValue("ProxyServer").ToString(); int orignalProxyEnable = int.Parse(registry.GetValue("ProxyEnable").ToString()); int i = 0; while (i < listBox1.Items.Count) { //Enter new proxies Settings// registry.SetValue("ProxyEnable", 1); registry.SetValue("ProxyServer", listBox1.Items[i].ToString()); RefreshInternetExplorerSettings(); try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.whatismyip.com/automation/n09230945.asp"); using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream())) { resopnse = reader.ReadToEnd(); this.Invoke(new EventHandler(DoIe)); } } catch (Exception c) { MessageBox.Show(c.Message); } i++; Application.DoEvents(); backgroundWorker1.ReportProgress(i); } registry.SetValue("ProxyEnable", orignalProxyEnable); registry.SetValue("ProxyServer", orignalProxyServer); RefreshInternetExplorerSettings();
, он меняет прокси один раз, но никогда большесохраняет и проверяет один и тот же прокси для остальной части циклав 64-битной среде
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); public bool Is64Bit() { bool retVal; IsWow64Process(System.Diagnostics.Process.GetCurrentProcess().Handle, out retVal); return retVal; } Microsoft.Win32.RegistryKey registry; if (Is64Bit()) { MessageBox.Show("Oh HO! you are running 64 bit version"); registry = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); } else { MessageBox.Show("Yes it is 32 bit"); registry = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); } string orignalProxyServer = registry.GetValue("ProxyServer").ToString(); int orignalProxyEnable = int.Parse(registry.GetValue("ProxyEnable").ToString()); int i = 0; while (i < listBox1.Items.Count) { //Enter new proxies Settings// registry.SetValue("ProxyEnable", 1); registry.SetValue("ProxyServer", listBox1.Items[i].ToString()); RefreshInternetExplorerSettings(); try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.whatismyip.com/automation/n09230945.asp"); using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream())) { resopnse = reader.ReadToEnd(); this.Invoke(new EventHandler(DoIe)); } } catch (Exception c) { MessageBox.Show(c.Message); } i++; Application.DoEvents(); backgroundWorker1.ReportProgress(i); } registry.SetValue("ProxyEnable", orignalProxyEnable); registry.SetValue("ProxyServer", orignalProxyServer); RefreshInternetExplorerSettings();
Кажется, что существует большая зависимость от версии Internet Explorer и узлов реестра, которые он использует:
Для Windows на базе x86 компьютеров: Чтобы изменить попытки подключения к компьютеру: HKEY_LOCAL_MACHINE \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Internet Settings Чтобы изменить пользовательские попытки подключения: HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Настройки Интернета Для Windows x 64-разрядных компьютеров: Чтобы изменить попытки подключения к компьютеру для 32-разрядной версии Internet Explorer: HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Настройки Интернета Чтобы изменить пользовательские попытки подключения для Internet Explorer 32-bit : HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Internet Settings Чтобы изменить попытки подключения к компьютеру на 64-разрядной версии Internet Explorer: HKEY_LOCAL_MACHINE \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Интернет-настройки Чтобы изменить пользовательские попытки подключения для Internet Explorer 64-bit : HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Internet Settings
Для Windows на базе x86 компьютеров:
Чтобы изменить попытки подключения к компьютеру: HKEY_LOCAL_MACHINE \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Internet Settings
Чтобы изменить пользовательские попытки подключения: HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Настройки Интернета
Для Windows x 64-разрядных компьютеров:
Чтобы изменить попытки подключения к компьютеру для 32-разрядной версии Internet Explorer: HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Настройки Интернета
Чтобы изменить пользовательские попытки подключения для Internet Explorer 32-bit : HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Internet Settings
Чтобы изменить попытки подключения к компьютеру на 64-разрядной версии Internet Explorer: HKEY_LOCAL_MACHINE \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Интернет-настройки
Чтобы изменить пользовательские попытки подключения для Internet Explorer 64-bit : HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ Internet Settings
Источник: http://www.thewindowsclub.com/fix-internet-explorer-cannot-display-the-webpage#ixzz1DPF9FSvK
Я бы порекомендовал вам попробовать использовать один и тот же узел для систем x86 и x64.
Если вам нужно установить прокси только для HttpWebRequest, вы можете сделать
req.Proxy = new WebProxy(listBox1.Items[i].ToString());
вместо изменения настроек реестра.