ServiceBase オブジェクトをオーバーライドすることで、SessionLogon と SessionLogoff (およびその他のほとんど) を正常に検出する Windows サービスがあります。これはうまくいきます。ただし、これらのイベントは、認証の直後、およびユーザーが [ログオフ] ボタンをクリックした (または自動化されたプロセスによってユーザーがログオフした) 直後に発生するようです。ユーザーが最初にログインを開始し、最初にログアウトを開始する時期を知ることに加えて、ユーザーがいつログオンを終了し、ログオフを終了するかを知る必要があります。私は現在、ログインのために実行を開始するユーザーのシェル プロセス (通常は explorer.exe) を探しています。ローミング プロファイルを使用している場合、または他のログイン アクションが実行されている場合、シェルが起動するまでに、
ただし、ログオフについては、これが信頼できるとは証明されていません。すべてのプロファイル情報の同期またはコピーが完了したときや、その他のログオフ アクションが発生したときなど、ユーザーのログオフがいつ完了したかを正確に検出する方法を探しています。シェル プログラムが終了するのを監視するだけでは、ログオフが発生するまでに数秒から数分かかる場合があるため、十分ではないようです (たとえば、ローミング プロファイルがある場合)。
要するに、完全なログオフがいつ発生したか、すべてのプロファイルの同期、またはSessionLogoff イベントが発生した後に何が完了したかを検出する C# でのプログラムによる方法を探しています。
私は広く見てきましたが、そのイベントが発生したときと実際のログオフが終了したときの時間差について話している人を見たことがありません。
注:ユーザーはログオフ後、プロファイルが同期/コピーを完了する前に切断する可能性があるため、切断イベントにも依存できません。終了したログオフを (発生してから数秒以内に) 検出する方法を探しています。