カスタム アクションのシーケンシング
カスタム アクションは、標準アクションと同じ方法でシーケンス テーブルでスケジュールされます。
シーケンス テーブルでカスタム アクションをスケジュールする方法
- カスタム アクション名 (CustomAction の主キー) を Sequence テーブルの Action 列に入力します。
- カスタム アクションのシーケンスを、テーブル内の他のアクションに対して相対的に Sequence テーブルの Sequence 列に入力します。 シーケンス テーブルについて詳しくは、「シーケンス テーブルの使用」のページをご覧ください。
- 条件付きでアクションをスキップするには、Sequence テーブルの Condition 列に条件式を入力します。 式が FALSE に評価された場合、インストーラーではこのアクションがスキップされます。
標準アクションの場合と同様に、InstallUISequence または AdminUISequence でスケジュールされたカスタム アクションは、内部ユーザー インターフェイスがフル レベルに設定されている場合にのみ実行されます。 UI レベルは、MsiSetInternalUI 関数を使用して設定されます。
InstallExecuteSequence、AdminExecuteSequence、AdvtExecuteSequence テーブルでスケジュールされた標準アクションとカスタム アクションでは、システム変更は行われません。 代わりに、インストーラーでは、インストール サービス中に後続の実行スクリプト内の実行レコードがキューに入れられます。 インストール サービスがない場合、これらのテーブルでスケジュールされたアクションは UI シーケンスと同じコンテキストで実行されます。
インストーラー サーバーが登録されていない場合、カスタム アクションはクライアント側で実行されます。 サーバーが登録されており、完全な UI モードを使用している場合、カスタム アクションはサーバー側で実行されます。
サーバーで完全な UI を使用する場合は、InstallValidate アクションの前の初期アクションがクライアントで実行され、完全な対話式操作が可能になります。 その後、実行は、これらのアクションが繰り返されスクリプト実行アクションを実行するサーバーに切り替えられます。 その後、最終的なアクションはクライアントに戻ります。
トップの機能を absent に設定して製品を削除した場合、InstallValidate アクションの後まで REMOVE プロパティが ALL と等しくない場合があることに注意してください。 つまり、REMOVE=ALL に依存するカスタム アクションはすべて、InstallValidate アクションの後にシーケンス処理する必要があります。 カスタム アクションでは、REMOVE をチェックして、製品が完全にアンインストールされるように設定されているかどうかを判断する場合があります。
インストールされているファイルをソースとして参照する Custom Action Type 17 (DLL)、Custom Action Type 18 (EXE)、Custom Action Type 21 (JScript)、Custom Action Type 22 (VBScript) などのカスタム アクションは、次のシーケンス処理の制限に従う必要があります。
- 参照ファイルへのパスを解決できるよう、カスタム アクションの順序は CostFinalize アクションより後にする必要があります。
- ソース ファイルがコンピューターにまだインストールされていない場合、遅延 (スクリプト内) カスタム アクションの順序は、InstallFiles より後にする必要があります。
- ソース ファイルがコンピューターにまだインストールされていない場合、非遅延カスタム アクションの順序は、InstallInitialize アクションより後にする必要があります。
次のシーケンス処理の制限は、Windows インストーラー パッケージを変更または更新するカスタム アクションに適用されます。
- テーブルに行を追加するなどしてカスタム アクションによってパッケージが変更された場合、アクションの順序は InstallInitialize アクションより前にする必要があります。
- カスタム アクションによってコスト処理に影響する変更が加えられる場合、順序は CostInitialize アクションより前にする必要があります。
- カスタム アクションによって機能またはコンポーネントのインストール状態が変更される場合、順序は InstallValidate アクションより前にする必要があります。