O serviço .NET c # 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 sendo executado como LocalSystem no Windows 10 de 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 manualmente apenas abra e feche as "Opções de Internet > Configurações de proxy" do Windows alterações ou salvando-as) ou reinicie o (s) navegador (es). Os dois últimos fazem o sistema reler e propagar as configurações para todos os (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 somente quando eu executo este trecho 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. Também 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 disparar de alguma forma. Mas eu não sei como. Você?

    
por spaxxUnited 30.05.2017 / 00:05

0 respostas