У меня есть служба .NET c #, работающая как LocalSystem на Windows10 64bit. Его задача - изменить значения "ProxyEnable" и "ProxyServer", расположенные в
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
в реестре. Это делается для всех "пользователей" Пользователей Системы (то есть для ключа, начинающегося с «S-1-5-21 ..»). Он работает нормально, и все браузеры, которые пользователь запускает, используют эту конфигурацию (прокси или нет прокси).
Тем не менее, браузеры, которые все еще работают, не будут замечать изменения (включение или отключение настроек прокси) в течение длительного времени - ИЛИ пока я вручную не открою и не закрою «Свойства обозревателя> Настройки прокси» Windows (без внесения изменений или сохранения их). ) или перезапустите браузер (ы). Последние два заставляют Систему перечитывать и распространять настройки на все (другие) открытые браузеры.
Теперь DllImport'ing wininet.dll и использование InternetSetOption работает
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(
IntPtr hInternet,
int dwOption,
IntPtr lpBuffer,
int lpdwBufferLength);
private const int INTERNET_OPTION_PROXY_SETTINGS_CHANGED = 95;
private const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
private const int INTERNET_OPTION_REFRESH = 37;
...
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
но только когда я выполняю этот кусок кода как зарегистрированный пользователь. Когда служба выполняет это, она ничего не делает. Я предполагаю, что это потому, что как LocalSystem служба применяет его в неправильной области.
Я много повозился. Попытка запустить другой процесс, поскольку у пользователя нет выбора, так как для этого потребуются учетные данные. Также установлен сервис, использующий LocalSystem.
Я просто убежден, что как LocalSystem, которая близка к Администратору с точки зрения привилегий, должен быть способ сообщить всем приложениям и браузерам, что Настройки прокси изменились. Это просто распространение как открытие и закрытие Proxy Settings-GUI вызывает, что мне нужно как-то вызвать. Но я не знаю как. Вы?