0

ユーザーのログオン時に、C#でCreateProcessWithLogonWを使用して管理者としてプロセスを開始しています。

ユーザーがログオフしても、プログラムは閉じられません。

CreateProcessWithLogonWを使用して開始したユーザーがログアウトしたときに閉じてほしい。それ、どうやったら出来るの?

CreateProcessWithLogonWを実行しているプロセスを実行し続ける方法はないため、管理者として開始されたプログラムは自殺する必要があります。

4

2 に答える 2

0

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() で。

于 2012-06-23T11:23:10.770 に答える
0

CreateProcessWithLogonW を発行したアプリケーションがまだ実行されている場合は、Windows がログアウトを開始して子アプリケーションを閉じるタイミングも検出できます。たとえば、SystemEvents.SessionEnding イベントを使用する

于 2012-06-21T22:54:40.410 に答える