Windows 10 64bitでLocalSystemとして実行している.NET c#サービスがあります。レジストリにLocalSystemとして実行されている.NET c#サービスはレジストリ内のProxyServerを変更しますが、ブラウザは(再)開始まで通知しません。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
の下にある「ProxyEnable」と「ProxyServer」の値を変更することです。これは、システムのすべての "人間"ユーザー(すなわち、 "S-1-5-21 .."で始まるキー)に対してそうです。それは正常に動作し、ユーザーが起動するすべてのブラウザーがこの構成を使用します(プロキシーまたはプロキシーなし)。
しかし、ブラウザは、変更を気付かずに(プロキシの設定をオンまたはオフにする)長い時間がかかります。または手動でWindowsの「インターネットオプション>プロキシ設定」を閉じるまで変更または保存)するか、ブラウザを再起動します。後者の2つは、システムを再読み込みし、すべての(他の)開いているブラウザに設定を伝播させます。
今のwininet.dllをDllImport'ingとて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として権限の面でAdministratorに近いと確信しています。すべてのアプリケーションとブラウザにプロキシ設定が変更されたことを伝える方法が必要です。 Proxy Settings-GUIを起動したり閉じたりするような伝播は、何とかトリガーする必要があります。しかし、私はどのように知りません。あなたは?
Thx。しかし、私が言ったように、あなたはProxySettings-GUIを開いて閉じることができ、そしてすべてのブラウザは再起動せずに新しい設定を知っています。だから私の結論は:ブラウザを再起動せずに方法が必要です。このために作成したDLLを使用して、リンクしたURLにこれを達成する方法が示されます。そして、私はどちらを使うべきかを理解しています。そのwininet.dllとそのInternetSetOptionメソッド。しかし、サービスがLocalSystemとして実行されているので、ユーザー/ドメイン空間でそのメソッドを呼び出すことはできません。 – spaxxUnited
公正なポイント。あなたはスーパーユーザーに投稿しようとするかもしれません - いくつかのパワーシェルの黒い魔法が助けになるかもしれません。 – Steveland83
となります。どうも – spaxxUnited