Serviço c # .NET sendo executado como LocalSystem altera ProxyServer no registro, mas o navegador não notará até (re) iniciar


1

Eu tenho um serviço c # .NET executando como LocalSystem no Windows10 64 bits. O trabalho é alterar os valores "ProxyEnable" e "ProxyServer" localizados em

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

no registro. Ele faz isso para todos os usuários "humanos" do sistema (isto é, a chave que começa com "S-1-5-21"). Ele funciona bem e todos os navegadores que o usuário inicializa usam essa configuração (proxy ou nenhum proxy).

No entanto, os navegadores que ainda estão em execução não notarão alterações (ativando ou desativando a configuração do proxy) por muito tempo - OU até que eu manualmente apenas abra e feche as "Opções da Internet & Definições de Proxy" do Windows (sem fazer alterações ou salvar ou reinicie o (s) navegador (es). Os dois últimos fazem o sistema reler e propagar as configurações para todos (outros) navegadores abertos.

Agora wininet.dll DllImport'ing e usando o InternetSetOption funciona

[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);

mas apenas quando eu executo este pedaço de código como o usuário logado. Quando o serviço o executa, ele não faz nada. Eu acho que é porque como LocalSystem o serviço está aplicando-o ao escopo errado.

Eu tenho mexido muito. Tentando iniciar outro processo como o usuário não é uma opção, pois isso exigiria credenciais. Além disso, o serviço usando LocalSystem está definido.

Estou convencido de que, como LocalSystem, que é próximo ao administrador em termos de privilégios, deve haver uma maneira de informar a todos os aplicativos e navegadores que as configurações de proxy foram alteradas. É apenas a propagação como abrir e fechar as configurações de proxy-GUI invoca, que eu preciso para acionar de alguma forma. Mas eu não sei como. Você?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.