シャットダウン

アプリケーションでローカル コンピューターまたはリモート コンピューターをシャットダウンするには、次の 3 つの方法があります。

  • システムをシャットダウンする
  • システムをシャットダウンして再起動する
  • アプリケーションをシャットダウンし、システムをシャットダウンして再起動し、再起動のために登録されているアプリケーションをすべて再起動します

システムをシャットダウンするには、 ExitWindowsEx 関数と EWX_SHUTDOWN フラグを使用します。 例については、「 システムをシャットダウンする方法」を参照してください。 システムをシャットダウンして再起動するには、EWX_REBOOT フラグを使用します。 RegisterApplicationRestart 関数を使用して再起動のために登録されているアプリケーションを再起動するには、EXW_RESTARTAPPS フラグを使用します。

InitiateShutdownInitiateSystemShutdown、および InitiateSystemShutdownEx 関数はタイマーを開始し、ユーザーにログオフを求めるダイアログ ボックスを表示します。 このダイアログ ボックスが表示されている間、 AbortSystemShutdown 関数はタイマーを停止し、コンピューターがシャットダウンしないようにすることができます。 ただし、タイマーの有効期限が切れると、コンピューターはシャットダウンされます。 これらの関数は、シャットダウン操作の後にコンピューターを再起動することもできます。 詳細については、「 シャットダウン ダイアログ ボックスの表示」を参照してください。

シャットダウン通知

ウィンドウとメッセージ キューを持つアプリケーションは、 WM_QUERYENDSESSION を介してシャットダウン通知を受け取り、メッセージ をWM_ENDSESSION します。 これらのアプリケーションは、終了できることを示すために TRUE を 返す必要があります。 アプリケーションは、絶対に必要でない限り、システムのシャットダウンをブロックしないでください。 アプリケーションは、 WM_ENDSESSIONの処理中に必要なクリーンアップを実行する必要があります。 データが保存されていないアプリケーションでは、データを一時的な場所に保存し、次にアプリケーションを起動するときに復元できます。 アプリケーションでは、データと状態を頻繁に保存することをお勧めします。たとえば、ユーザーが開始した保存操作の間にデータを自動的に保存して、シャットダウン時に保存するデータの量を減らします。

コンソール アプリケーションは、ハンドラー ルーチンでシャットダウン通知を受け取ります。 コンソール ハンドラーを登録するには、 SetConsoleCtrlHandler 関数を使用します。

サービス アプリケーションは、ハンドラー ルーチンでシャットダウン通知を受け取ります。 サービス コントロール ハンドラーを登録するには、 RegisterServiceCtrlHandlerEx 関数を使用します。

シャットダウンのブロック

アプリケーションがシステムシャットダウンの可能性をブロックする必要がある場合は、 ShutdownBlockReasonCreate 関数を呼び出すことができます。 呼び出し元は、ユーザーに表示される理由文字列を提供します。 理由文字列は短く明確にする必要があり、システムのシャットダウンを続行するかどうかを決定するために必要な情報をユーザーに提供します。

システムをシャットダウンする方法