カスタム アクション実行スケジュール オプション
カスタム アクションは UI シーケンス テーブルと実行シーケンス テーブルの両方でスケジュールでき、サービスまたはクライアント プロセスで実行できるため、カスタム アクションは複数回実行される可能性があります。
インストーラーは次のように動作しますので注意してください。
- 既定では、シーケンス テーブルのアクションを直ちに実行します。
- シーケンス テーブルの条件式フィールドが False に評価された場合、アクションを実行しません。
- 内部ユーザーのインターフェイス レベルが完全 UI モードに設定されている場合、クライアント プロセスで UI シーケンス テーブルを処理します (UI レベルについては、「MsiSetInternalUI」を参照してください)。
- インストーラーは、Windows 2000 を使用するときに既定で登録されるサービスであり、この場合、実行シーケンス テーブルはインストーラー サービスで処理されます。
次のオプション フラグを使用して、カスタム アクションの複数即時実行を制御できます。 オプションを設定するには、この表の値を CustomAction テーブルの Type フィールドの値に追加します。 遅延実行カスタム アクションでは、次のフラグは使用しないでください。
-
(既定)
-
16 進数: 0x00000000
10 進数: 0
常に実行します。 アクションが両方のシーケンス テーブルに存在する場合、アクションは 2 回実行される可能性があります。
-
msidbCustomActionTypeFirstSequence
-
16 進数: 0x00000100
10 進数: 256
両方のシーケンス テーブルに存在しても、1回だけ実行します。 UI シーケンスが実行されている場合、実行シーケンスのアクションは常にスキップされます。 UI シーケンスには影響しません。 アクションは、実行シーケンスでスキップするために、UI シーケンスに存在する必要も、UI シーケンスで実行する必要もありません。 インストール サービスの登録の影響を受けません。
-
msidbCustomActionTypeOncePerProcess
-
16 進数: 0x00000200
10 進数: 512
両方のシーケンス テーブルに存在する場合、プロセスごとに 1 回実行します。 UI シーケンスが同じプロセスで実行されている場合 (たとえば、両方のシーケンスがクライアント プロセスで実行されている場合)、実行シーケンスのアクションはスキップされます。 プロパティやデータベース データなどのセッション状態を変更するアクションが 2 回実行されないようにするために使用されます。
-
msidbCustomActionTypeClientRepeat
-
16 進数: 0x00000300
10 進数: 768
UI シーケンスの実行後、クライアントで実行される場合に限り実行します。 アクションは、UI シーケンスに続いてクライアントで実行シーケンスが実行される場合に限り実行されます。 either/or ロジックを提供するため、または UI 関連の処理がクライアント セッションで既に実行されている場合にそれらの処理を抑制するために使用できます。
2 つの異なる実行モードでカスタム アクションを実行するには、CustomAction テーブルに 2 つのエントリを作成します。 たとえば、モードが MSIRUNMODE_SCHEDULED と MSIRUNMODE_ROLLBACK の両方のときに、C/C++ ダイナミック リンク ライブラリ (DLL) を呼び出すカスタム アクション (カスタム アクションの種類 1) を用意するには、同じ DLL を呼び出す一方で、異なる数値型を持つ 2 つのエントリを CustomAction テーブルに配置します。 どのカスタム アクションをいつ実行するか決定するために、MsiGetMode を呼び出すコードを組み込みます。
関連トピック