遅延実行カスタム アクションのコンテキスト情報の取得

インストール スクリプトは、作成されたインストール セッションの外部で実行できるため、インストール スクリプトの実行中にセッションが存在しなくなる場合があります。 この場合、インストール シーケンス中に設定された元のセッション ハンドルとプロパティは、遅延実行カスタム アクションでは使用できません。 セッション ハンドルを必要とする関数で使用できるメソッドはコンテキスト情報を取得できるいくつかのメソッドに制限されます。そうしないためには、スクリプト実行中に必要なプロパティがインストール スクリプトに書き込まれている必要があります。 たとえば、ダイナミックリンク ライブラリ (DLL) を呼び出す遅延カスタム アクションによって渡されるハンドルでは、非常に少数の情報のみを取得できます。 セッション ハンドルを必要としない関数には、遅延カスタム アクションからアクセスできます。

遅延実行のカスタム アクションは、ハンドルを必要とする以下の関数のみを呼び出せるよう制限されます。

機能 説明
MsiGetProperty 遅延実行のカスタム アクションで使用される場合、限られたプロパティ セット (CustomActionData プロパティ、ProductCode プロパティ、および UserSID プロパティ) をサポートします。Commit カスタム アクションでは、MsiGetProperty 関数を使用して ProductCode プロパティを取得することはできません。 Commit カスタム アクションでは、CustomActionData プロパティを使用して製品コードを取得できます。
MsiFormatRecord 遅延実行のカスタム アクションで使用する場合、限られたプロパティ セット (CustomActionData プロパティと ProductCode プロパティ) をサポートします。
MsiGetMode モード パラメーター MSIRUNMODE_SCHEDULED、MSIRUNMODE_COMMIT、または MSIRUNMODE_ROLLBACK をチェックするように要求され、遅延実行のカスタム アクションCommit カスタム アクション、またはロールバックのカスタム アクションから呼び出された場合、MsiGetMode は True または False を返します。 遅延、コミット、またはロールバックのカスタム アクションから他の実行モード パラメーターを確認するように要求された場合は、False を返します。
MsiGetLanguage 現在の製品の数値言語 ID。Commit カスタム アクションでは、MsiGetLanguage 関数を使用できません。 Commit カスタム アクションでは、CustomActionData プロパティを使用して数値言語 ID を取得できます。
MsiProcessMessage カスタム アクションからのエラー メッセージまたは進行状況メッセージを処理します。

 

JScript または VBScript で記述されたカスタム アクションには、インストール Session オブジェクトが必要です。 これは Session オブジェクト型で、インストーラーによって "Session" という名前のスクリプトにアタッチされます。 インストール ロールバック中には Session オブジェクトが存在しない可能性があるため、スクリプトで記述された遅延カスタム アクションでは、Session オブジェクトの次のいずれかのメソッドまたはプロパティを使用してコンテキストを取得する必要があります。

名前 説明
Mode プロパティ MSIRUNMODE_SCHEDULED の場合にのみ True を返します。
Property プロパティ (Session オブジェクト) CustomActionData プロパティ、ProductCode プロパティ、または UserSID プロパティを返します。
Language プロパティ (Session オブジェクト) インストール セッションの数値言語 ID を返します。
Message メソッド エラーと進行状況を処理するために呼び出されます。
Installer プロパティ レジストリ アクセスやインストーラーの構成管理などの非セッション機能に使用される親オブジェクトを返します。

 

インストール シーケンスがスクリプトに処理されるときに設定されるプロパティ値は、スクリプトの実行時には使用できない場合があります。 スクリプトの実行中にカスタム アクションが常にアクセスできるのは、次の限られたプロパティ のセットのみです。

プロパティ名 説明
CustomActionData カスタム アクションがシーケンス テーブルで処理される時点の値。 CustomActionData プロパティは、遅延実行カスタム アクションでのみ使用できます。 即時のカスタム アクションは、このプロパティにアクセスすることはできません。
ProductCode 製品の一意のコード(GUID 文字列)。
UserSID インストーラーによってユーザーのセキュリティ識別子 (SID) に設定されます。

 

遅延実行カスタム アクションに他のプロパティ データが必要な場合は、その値をインストール スクリプトに格納しておく必要があります。 これは、2 つ目のカスタム アクションを使用して行うことができます。

遅延実行のカスタム アクション中に使用するプロパティの値をインストール スクリプトに書き込む

  1. インストール シーケンスに、対象のプロパティを遅延実行カスタム アクションと同じ名前を持つプロパティに設定する小さなカスタム アクションを挿入します。 たとえば、遅延実行カスタム アクションの主キーが "MyAction" の場合は、取得する必要があるプロパティ X に "MyAction" という名前のプロパティを設定します。 "MyAction" プロパティは、"MyAction" カスタム アクションの前にインストール シーケンスで設定する必要があります。 どの種類のカスタム アクションでもコンテキスト データを設定できますが、最も簡単な方法は、プロパティ割り当てのカスタム アクション (カスタム アクション タイプ 51 など) を使用することです。
  2. インストール シーケンスが処理された時点で、プロパティ X の値がプロパティ CustomActionData の値として実行スクリプトに書き込まれます。

プロパティについて

プロパティの使用

プロパティ リファレンス