ユーザーのログオン時に、C#でCreateProcessWithLogonWを使用して管理者としてプロセスを開始しています。
ユーザーがログオフしても、プログラムは閉じられません。
CreateProcessWithLogonWを使用して開始したユーザーがログアウトしたときに閉じてほしい。それ、どうやったら出来るの?
CreateProcessWithLogonWを実行しているプロセスを実行し続ける方法はないため、管理者として開始されたプログラムは自殺する必要があります。
http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspxの例 2で説明されている HiddenForm を使用してこれを解決しました。
これは最初は Windows サービス用でしたが、Windows フォーム アプリケーションでも機能します。 GUIなしで。GUI のないアプリケーション (コンソール アプリケーション、Windows サービスも含む) で SessionEnding イベントを取得しない理由は、(基本的に) 開いている各ウィンドウにのみ割り当てられる Windows メッセージ ポンプを介して送信されるためです。
Windows メッセージの詳細については、次の記事を参照してください: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927%28v=vs.85%29.aspx
この例を(XPで)本当に見えないようにするには、あなたも必要です
this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
HiddenForm.InitializeComponent() で。
CreateProcessWithLogonW を発行したアプリケーションがまだ実行されている場合は、Windows がログアウトを開始して子アプリケーションを閉じるタイミングも検出できます。たとえば、SystemEvents.SessionEnding イベントを使用する