Измените прокси в IE c # для win 7 64 bit (протестируйте с использованием httperbrequest, чтобы убедиться в изменении реестра) - PullRequest
0 голосов
/ 08 февраля 2011

Я тестировал свое приложение на 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();

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Кажется, что существует большая зависимость от версии 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

Источник: http://www.thewindowsclub.com/fix-internet-explorer-cannot-display-the-webpage#ixzz1DPF9FSvK

Я бы порекомендовал вам попробовать использовать один и тот же узел для систем x86 и x64.

1 голос
/ 08 февраля 2011

Если вам нужно установить прокси только для HttpWebRequest, вы можете сделать

req.Proxy = new WebProxy(listBox1.Items[i].ToString());

вместо изменения настроек реестра.

...