インストールの完了アクションの実装のガイドライン
Note
このセクションで説明する機能は、ユニバーサル ドライバー パッケージまたはモバイル ドライバー パッケージではサポートされていません。 「ユニバーサル INF ファイルの使用」を参照してください。
インストールの完了アクションは、インストーラー (クラス インストーラー、クラス共同インストーラー、またはデバイス共同インストーラー) によって実行できます。 インストールの完了アクションでは、インストーラーは実行可能プログラムの実行、プロセスの作成、スレッドの作成、デバイス ドライバーのインストールの完了インストール プロセスでのコードの実行を行うことができます。
インストーラーでインストールの完了アクションを実装する場合は、次のガイドラインを考慮してください。
インストールの完了アクションを使用して、デバイスが動作するために必要な重要な設定を適用することはできません。
インストールの完了アクションを完了するまで実行する必要がある場合、インストーラーはインストールの完了アクションが完了するまで待機する必要があります。
たとえば、インストールの完了アクションの実行中にシステムの再起動によって中断されないようにするには、インストーラーが DIF_FINISHINSTALL_ACTION 要求の処理から戻る前に、インストールの完了アクションが完了するまで待機する必要があります。
インストールの完了アクションは、進行状況をユーザーに通知する必要があります。
Windows では、インストールの完了アクションが実行されていること、またはインストールの完了アクションが成功または失敗したことをユーザーに通知しません。 そのため、インストールの完了アクションは、インストールの完了アクションが進行中であることをユーザーに通知し、インストールの完了アクションが成功または失敗したことをユーザーに通知する必要があります。
インストーラーは、インストールの完了アクションを完了するためにシステムの再起動が必要な状況を処理する必要があります。
デバイスで設定を有効にする前にインストールの完了アクションでシステムの再起動が必要な場合、インストーラーは、DIF_FINISHINSTALL_ACTION 要求の処理から戻る前に、DI_NEEDREBOOT フラグを設定する必要があります。 ただし、デバイスのインストールでは、絶対に必要でない限り、コンピューターの再起動を強制しないでください。
デバイスのインストールでシステムの再起動が必要な場合の詳細については、「デバイスのインストールとシステムの再起動」を参照してください。
インストーラーは、インストール完了アクションが失敗したが、もう一度試行する必要がある状況を処理する必要があります。 たとえば、インストールされているデバイスがシステムから削除されている場合、インストーラーはこの方法でインストールの完了アクションを失敗させることができます。
Windows 8 より前のバージョンでは、インストールの完了アクションが失敗しても、もう一度試行する必要がある場合、インストーラーはユーザーに一時的なエラーを通知し、必要なクリーンを実行して、DIF_FINISHINSTALL_ACTION 要求に対して Win32 エラー コードを返す必要があります。 インストーラーが DIF_FINISHINSTALL_ACTION 要求の Win32 エラー コードを返した場合、Windows はデバイス ノード (devnode) のインストール完了アクションを実行するフラグが設定されているため、デバイスをクリアしません。
ただし、Windows 8 以降では、エラー コードを返してもフラグがクリアされません。 インストールの完了アクションにエラーが発生した場合は、後でもう一度実行する機能をユーザーに提供する必要があります。
このフラグがデバイスに設定されたまま、Windows は新しい完了インストール プロセスを実行します。
詳細については、「Finish-Install アクションの実行」を参照してください。
インストーラーは、インストール完了アクションが失敗し、もう一度試行すべきでない状況を処理する必要があります。
エラーが発生してインストール完了アクションが正常に実行できない場合、インストーラーはアクションを完了できないことをユーザーに通知してから、必要なクリーンアップを実行する必要があります。 このような場合、共同インストーラーは NO_ERROR を返す必要があり、デバイスまたはクラスのインストーラーは ERROR_DI_DO_DEFAULT を返す必要があります。 その後、Windows は、devnode のインストール完了アクションを実行するフラグが設定されたデバイスをクリアし、SetupDiFinishInstallAction を呼び出して既定のインストール完了操作を実行します。
インストーラーは、DIF_NEWDEVICEWIZARD_FINISHINSTALL DIF コードを処理するときに、インストール完了アクションが必要かどうかをチェックする必要があります。 インストーラーは、実行する必要があるインストール完了アクションがある場合にのみ、DI_FLAGSEX_FINISHINSTALL_ACTION フラグを設定する必要があります。 このフラグが不必要に設定されている場合、ドライバーの再インストール時に追加のデバイス インストール プロンプトがユーザーに表示されます。また、DIF_FINISHINSTALL_ACTION 要求には実行するインストール完了アクションはありません。
たとえば、デバイスが正常に動作するために必要なアプリケーションがインストールされる、デバイスの共同インストーラーについて考えてみます。 たとえば、Microsoft キーボードのインストール完了アクションで IntelliType アプリケーションがインストールされる場合があります。 このような共同インストーラーが DIF_NEWDEVICEWIZARD_FINISHINSTALL DIF コードを処理する場合は、アプリケーションが既にインストールされているかどうかをチェックする必要があります。 アプリケーションが既にインストールされている場合は、実行するインストール完了アクションがないため、DI_FLAGSEX_FINISHINSTALL_ACTION フラグを設定しないでください。 このような状況では、共同インストーラーが誤って DI_FLAGSEX_FINISHINSTALL_ACTION フラグを設定した場合、ユーザーは望ましくないユーザー アカウント制御 (UAC) プロンプトを受け取り、インストールの完了アクションに実行するアクションがない場合でも、続行するアクセス許可を求めます。
注: Windows 7 以降では、UAC が既定の設定 (「プログラムが自分のコンピューターに変更を加えようとした場合にのみ通知」) または低い設定に設定されている場合、オペレーティング システムは、インストールの完了操作を処理するときに、管理特権を持つユーザーのプロンプトを表示しません。
インストールの完了アクションを実装するインストーラーを登録する前に、デバイスの INF ファイルの CopyFiles ディレクティブに、インストールの完了アクションを実行するために必要なすべてのファイルを含めてインストールする必要があります。 これは、インストーラーがアクセスできる場所にファイルをインストール中に配置する場合に必要です。
デバイスまたはクラス共同インストーラーの登録要件の詳細については、「クラスの共同インストーラーの登録」を参照してください。