Share via


ロールバック カスタム アクション

インストーラーがインストール スクリプトを処理すると、ロールバック スクリプトが同時に生成されます。 ロールバック スクリプトに加えて、インストーラーはインストール中に削除するすべてのファイルのコピーを保存します。 これらのファイルは非表示のシステム ディレクトリに保持されます。 インストールが完了すると、ロールバック スクリプトと保存されたファイルが削除されます。 インストールが失敗した場合、インストーラーはインストール中に行われた変更をロールバックし、コンピューターの元の状態を復元しようと試みます。

行をデータベース テーブルに挿入してシステム操作をスケジュールするカスタム アクションは、インストールのロールバックによって元に戻されます。しかしながら、システムを直接変更する、または他のシステム サービスにコマンドを発行するカスタム アクションは、ロールバックによって元に戻されない場合もあります。 ロールバック カスタム アクションはインストーラーがインストール ロールバック中にのみ実行するアクションであり、その目的はシステムに変更を加えたカスタム アクションを元に戻す操作です。

ロールバック カスタム アクションはインストール シーケンス中に呼び出されたときに実行が遅延されるため、遅延実行カスタム アクションの一種になります。 ロールバック中にのみ実行されるという点で、通常の遅延カスタム アクションとは異なります。 ロールバック カスタム アクションでは、アクション シーケンスでロールバックする遅延カスタム アクションの前に常に置く必要があります。 また、遅延カスタム アクションが実行中に中断されるケースも処理する必要があります。 たとえば、ユーザーがカスタム アクションの実行中に [キャンセル] ボタンを押す場合などです。

ロールバック カスタム アクションは非同期では実行できないことにご注意ください。 「同期/非同期カスタム アクション」を参照してください。

ロールバック カスタム アクションの補足アクションは、コミット カスタム アクションです。 インストーラーはコミット カスタム アクションをインストール シーケンス中に実行してカスタム アクションをロールバック スクリプトにコピーしますが、ロールバック中はアクションを実行しません。

ロールバック カスタム アクションでは、コミット カスタム アクションによって行われたすべての変更を削除できない場合があることにご注意ください。 インストーラーはロールバックとコミットの両方のカスタム アクションをロールバック スクリプトに書き込みますが、コミット カスタム アクションはインストーラーがインストール スクリプトを正常に処理した後にのみ実行されます。 コミット カスタム アクションは、ロールバック スクリプトで実行する最初のアクションです。 コミット カスタム アクションが失敗した場合、インストーラーはロールバックを開始しますが、ロールバック スクリプトにすでに書き込まれている操作のみをロールバックできます。 つまり、コミット カスタム アクションによっては、ロールバックでアクションによって行われた変更を元に戻すことができない場合があります。 カスタム アクションを作成してリターン コードを無視して、エラーをコミット カスタム アクションで無視できます。

インストーラーがロールバック カスタム アクションを実行すると設定される mode パラメーターは、MSIRUNMODE_ROLLBACK のみです。 実行モード パラメーターの説明については、「MsiGetMode」を参照してください。

オプション フラグを CustomAction テーブルの Type フィールドに追加すると、ロールバック カスタム アクションを指定できます。 ロールバック カスタム アクションを指定するオプション フラグについては、「カスタム アクション スクリプト内実行オプション」を参照してください。

ロールバックが無効になっている際に、ロールバック カスタム アクションとコミット カスタム アクションは実行されません。 パッケージ作成者がこれらの種類のカスタム アクションを適切なインストールのために必要とする場合は、RollbackDisabled プロパティをロールバックが無効になっている際にインストールを続行できない状態で使用する必要があります。 ロールバックを無効にする方法については、「ロールバック インストール (Windows インストーラー)」を参照してください。