1

Windows XP/VISTA/7

explorer.exe が終了した後、ユーザーのログオフ手順中にアプリケーションを実行するにはどうすればよいでしょうか?

目的はシャットダウンをブロックすることですが、エクスプローラーが終了した後に実行されるアプリケーションを使用します。

もちろん、Vista で ShutdownBlockReasonCreate を使用してシャットダウンを一時的にブロックすることも、XP で WM_QUERYENDSESSION を介してシャットダウンをキャンセルすることもできます。ただし、これらの方法は両方とも、ユーザー セッション中に Explorer が終了する前に発生します。問題は、エクスプローラーが終了した後にアプリを実行し、シャットダウンをブロックする方法です。

VISTA/7 では、ユーザーがシャットダウン/再起動を選択した場合、サービスはユーザーがログオフした後にシャットダウンをブロックする方法がないように見えるため、サービスからこれを行うことはできません。(カーネルはサービスを終了しているようで、サービス自体はユーザー アプリのようにシャットダウンをブロックできませんか?)

WinLogon はいつ、どのように Explorer.exe を終了しますか? 他のすべてのアプリケーションが終了し、シャットダウンのブロックが停止するまで待ってから、エクスプローラーを終了するようです?

WinLogon は、最終的にデスクトップ/セッションを閉じる前に、explorer.exe が閉じるのを待ちますか?

たとえば、プロセスを終了し、エクスプローラーの終了をインターセプトする API の NTDLL をフックしようとすることを検討しましたが、Winlogon がシャットダウンを続行するのではなく、どのように、またはなぜ待機するのかは不明です。

これらすべての目的は、Vista/7 のシャットダウン中に実行可能ファイルを実行する方法を見つけることです。これにより、エクスプローラーが終了し、すべてのファイルとリソースがエクスプローラーによって解放された後にのみ、シャットダウンをブロックすることができます。そのユーザーとして実行されている他のアプリ。

XP では、WM_QUERYENDSESSION でシャットダウンをキャンセルし、ExitWindowsEx (LOGOFF) を再発行して、システム サービスでタスクを実行するだけでこれが可能です。ただし、進行状況が表示されないログオン画面が表示されます。

エクスプローラーの終了後にプロセスを挿入できる場合、プロセスは (私の理論では) 同じユーザーのデスクトップに UI を表示し、ログオフ手順中に 2 回目のカスタム シェルとして効果的に機能することができます。

シャットダウン中に更新をインストールするときに、Windows が同様のことを実行すると考えられている/疑われています (ただし、この動作は今のところ Vista では確認されていません)。

要約すると、ユーザーのログアウト中にエクスプローラーが閉じた後、Vista でシャットダウンをブロックする明らかな方法はないようです。

4

0 に答える 0