Windowsがシャットダウン(または再起動)したとき、またはユーザーがログオフしたときを検出する必要があります。アプリケーションを閉じる前に、アプリケーションを適切に閉じる必要があります。 Windowsが終業しているときに、exitアプリケーションイベントが発生しないことに気付きました。
私は投稿を読みました c#でWindowsのシャットダウン/ログオフを検出し、そのアクションをキャンセルする方法はありますか(ユーザーに尋ねた後)
しかし、閉じる前にどこで操作を実行する必要があるのかわかりません。ありがとう。
イベントハンドラメソッドを接続する に SystemEvents.SessionEnding
event 。イベントが発生するたびにハンドラーメソッドが呼び出されます。このイベントを処理すると、保留中のログオフまたはシャットダウンをcancelできます(必要な場合)。 (実際には、現在のオペレーティングシステムでの音のようには動作しませんが、詳細については MSDNドキュメント を参照してください。)
イベントをキャンセルしたくないが、適切に対応したい場合は、 SystemEvents.SessionEnded
event 代わりに。
ただし、アプリケーションが閉じられたときに、イベントハンドラーは静的イベントであるため、必ずdetachする必要があります。
コードが非対話型セッション(システムサービスなど)で実行されていない場合は、 pinvoke を使用してネイティブソリューションを使用できます。
//SM_SHUTTINGDOWN = 0x2000
bool bShutDownPending = GetSystemMetrics(SM_SHUTTINGDOWN) != 0;