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ê?