カスタム アクション内から現在のインストーラー セッションにアクセスする
ダイナミックリンク ライブラリまたはスクリプトを呼び出す非遅延カスタム アクションでは、実行中のインストールにアクセスして、現在のインストール セッションの属性に対するクエリ実行または変更を行うことができます。 各プロセスに存在できる Session オブジェクトは 1 つだけであり、カスタム アクション スクリプトは別のセッションの作成を試みてはなりません。
カスタム アクションでは、データベースに対して一時的な行、列、またはテーブルを追加、変更、または削除することのみが可能です。 カスタム アクションでは、データベース内の永続的なデータを変更することはできません (例えば、ディスクに保存されているデータベースの一部であるデータなど)。
実行中のインストールにアクセスするために、ダイナミックリンク ライブラリ (DLL) を呼び出すカスタム アクションには、CustomAction テーブルの Target 列に指定された DLL エントリ ポイントへの唯一の引数として現在のセッションの MSIHANDLE 型のハンドルが渡されます。 このハンドルはインストーラーによって提供されるため、カスタム アクションはこれを閉じてはなりません。たとえば、インストーラーからハンドル hInstall を受け取るには、カスタム アクション関数は次のように宣言されます。
UINT __stdcall CustomAction(MSIHANDLE hInstall)
現在のデータベースに読み取り専用でアクセスする場合は、MsiGetActiveDatabase を呼び出してデータベース ハンドルを取得します。 詳細については、「データベース ハンドルの取得」を参照してください。
VBScript または JScript で記述されたカスタム アクションでは、Session オブジェクトを使用して現在のインストール セッションにアクセスできます。 インストーラーは、現在のインストールを参照する "Session" という名前の Session オブジェクトを作成します。 現在のデータベースに読み取り専用でアクセスする場合は、Session オブジェクトの Database プロパティを使用します。
スクリプトは Session オブジェクトのコンテキストから実行されるため、プロパティとメソッドを完全修飾する必要は必ずしもありません。 次の例では、VBScript を使用する場合、Me 参照で Session オブジェクトを置き換えることができます。たとえば、次の 3 行は同等です。
Session.SetInstallLevel 1
Me.SetInstallLevel 1
SetInstallLevel 1
コマンド ラインで起動された実行可能ファイルを呼び出すカスタム アクション (カスタム アクションの種類 2 やカスタム アクションの種類 18 など) からは、現在のインストーラー セッションにアクセスすることはできません。
遅延実行カスタム アクションから、現在のインストーラー セッションまたはすべてのプロパティ データにアクセスすることはできません。 詳細については、「遅延実行カスタム アクションのコンテキスト情報の取得」を参照してください。
関連トピック