Можно ли установить и сбросить авто-прокси (WPAD) и «применить» конфигурацию к системе? - PullRequest
0 голосов
/ 12 марта 2019

Мне нужно установить скрипт автоматической настройки, который будет устанавливать прокси.

Когда я делаю это через настройки локальной сети, все в порядке, и Chrome сразу же узнает об этом изменении. Я попытался воспроизвести это поведение, изменив ключ реестра Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings -> AutoConfigURL, но Chrome знает об этом изменении только через несколько минут после изменения (не знаю, почему).

Моя следующая попытка - использовать Winapi, но я не могу найти, как установить этот скрипт. Я нашел функцию чтения WinHttpDetectAutoProxyConfigUrl, которая хорошо работает, но я не могу найти эквивалент записи.

Как мне настроить скрипт авто-прокси с Winapi?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Вместо того, чтобы возиться с реестром напрямую, я рекомендую делать все через WinINet API .См. Программно установить настройки прокси браузера в C # для получения информации о том, как сделать это с помощью C #.Код, упомянутый в этом вопросе, также может быть найден здесь .

РЕДАКТИРОВАТЬ

В примере также упоминаются проблемы с реестром.У меня есть загруженные части программы, которые показывают, как сделать все, используя вызовы WinINet.К сожалению, программа написана на Delphi, поэтому вам, возможно, придется перевести ее на C #.Важно то, что перед установкой новых значений всегда сбрасываются настройки прокси.

0 голосов
/ 13 марта 2019

У меня частичный ответ (только для настройки автопрокси).После изменения реестра необходимо вызвать InternetInitializeAutoProxyDll.

Вот пример кода:

[DllImport("wininet.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int InternetInitializeAutoProxyDll(uint dwReserved);

// ...

registryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);

// Setup the registry value:
registryKey.SetValue("AutoConfigURL", "http://the/config/path");

// Tell Windows to initialize the proxy:
if (InternetInitializeAutoProxyDll(0) == 0)
{
    throw new Win32Exception(Marshal.GetLastWin32Error());
}

Однако он не работает, когда прокси-сервер не установлен:

registryKey.DeleteValue(AutomaticProxyRegistryName);

// Does nothing:
if (InternetInitializeAutoProxyDll(0) == 0)
{
    throw new Win32Exception(Marshal.GetLastWin32Error());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...