アプリケーションのガイドライン
Windows Vista および Windows Server 2008 で実行されているアプリケーションは、更新プログラムをインストールするために必要に応じて再起動マネージャーがアプリケーションをシャットダウンして再起動できるように、これらのガイドラインに従う必要があります。 サービスでは、「サービスのガイドライン」に記載されている ガイドラインを使用できます。
再起動マネージャーは、lParam パラメーターが ENDSESSION_CLOSEAPP (0x1) に設定されたWM_QUERYENDSESSION通知を送信して、GUI アプリケーションに対してシャットダウンを照会します。 別のアプリケーションがシャットダウンする準備ができていない可能性があるため、 WM_QUERYENDSESSION メッセージを受信したときにアプリケーションをシャットダウンしないでください。 GUI アプリケーションは 、WM_QUERYENDSESSION メッセージをリッスンし、アプリケーションがシャットダウンして再起動する準備ができている場合は TRUE の値を返す必要があります。 アプリケーションが FALSE の値を返さない場合、再起動マネージャーは、lParam パラメーターを ENDSESSION_CLOSEAPP (0x1) に設定し、wparam パラメーターを TRUE に設定して、WM_ENDSESSION メッセージを送信します。 アプリケーションは、 WM_ENDSESSION メッセージを受信した場合にのみシャットダウンする必要があります。 また、再起動マネージャー は、WM_ENDSESSION の受信時にシャットダウンしない GUI アプリケーションの WM_CLOSE メッセージも送信します。 いずれかの GUI アプリケーションが FALSE の値を返してWM_QUERYENDSESSION メッセージに応答した場合、シャットダウンは取り消されます。 ただし、シャットダウンが強制された場合、アプリケーションは関係なく終了します。
GUI アプリケーションが WM_ENDSESSION メッセージを受信すると、アプリケーションは、指定されたタイムアウト期間内にシャットダウンするように準備する必要があります。 少なくとも、再起動後に必要なユーザー データと状態情報を保存して、アプリケーションを準備する必要があります。 アプリケーションでは、ユーザー データと状態を定期的に保存することをお勧めします。
再起動マネージャーは、シャットダウンして再起動する必要があるコンソール アプリケーションに CTRL_C_EVENT 通知を送信します。 コンソール アプリケーションが CTRL_C_EVENT 通知を受け取ると、アプリケーションは、指定されたタイムアウト期間内にシャットダウンの準備に必要なアクションを実行する必要があります。 少なくとも、コンソール アプリケーションでは、CTRL_C_EVENT通知を処理する HandlerRoutine 関数を定義し、再起動後に必要になるユーザー データと状態情報を保存する必要があります。 アプリケーションでは、ユーザー データと状態を定期的に保存することをお勧めします。
シャットダウン メッセージに応答してアプリケーションがシャットダウンされない場合、インストーラーは RmShutdown 関数の RmForceShutdown オプションを使用して、アプリケーションのシャットダウンを強制できます。 インストーラーが強制シャットダウンを指定すると、再起動マネージャーはシャットダウン メッセージを送信してアプリケーションをクリーンにシャットダウンしようとしますが、失敗した場合は強制的にシャットダウンします。 GUI アプリケーションとコンソール アプリケーションを強制的にシャットダウンして、重要なセキュリティ更新プログラムのインストールを有効にすることができます。 これによりデータが失われる可能性があるため、アプリケーションはシャットダウン メッセージを処理し、必要に応じて正常にシャットダウンする必要があります。
アプリケーションは、 RegisterApplicationRestart 関数を使用して再起動のために登録する必要があります。 再起動マネージャーは、再起動のために登録されているアプリケーションのみを再起動できます。 これは、再起動マネージャーがアプリケーションの再起動時に使用するコマンド ライン コマンドを決定する唯一の方法です。 保存された状態またはデータを使用してアプリケーションを再度開く必要がある場合は、その情報をアプリケーションに登録されているコマンド ライン コマンドに含める必要があります。
Note
再起動したアプリケーションをシャットダウンする前に実行したのと同じディレクトリで実行する必要がある場合、アプリケーションはディレクトリ情報を保存し、再起動後にディレクトリに変更する必要があります。
Note
RmRestart 関数は、現在ログオンしているユーザーとして実行されていないアプリケーションを再起動しません。 たとえば、 RmRestart 関数は、現在ログオンしているユーザーとして 実行されない実行 コマンドで開始されたアプリケーションを再起動しません。 これらのアプリケーションは手動で再起動する必要があります。
再起動マネージャーは、更新プログラムをインストールするためにシステムの再起動が必要であると判断した場合、アプリケーションとサービスをシャットダウンしません。 代わりに、システムの再起動をスケジュールして更新プログラムをインストールするタイミングを決定するためにインストーラーに残します。 インストーラーは、EWX_RESTARTAPPS フラグを指定した ExitWindowsEx 関数、または SHUTDOWN_RESTARTAPPS フラグを持つ InitiateShutdown 関数を使用して、システムの再起動を必要とする更新によって発生する ユーザーの中断 を減らすことができます。 これらのフラグを使用すると、システムの再起動後に再起動に登録されたアプリケーションが確実に再起動されるため、ユーザーへの影響が最小限に抑えられます。