インストールが中断された場合、またはエラーで完了した場合にのみ実行するようにカスタム アクションをシーケンスする方法は?
現在のインストール ステータス (失敗/成功) を返す Windows インストーラー プロパティはありますか?
インストールが中断された場合、またはエラーで完了した場合にのみ実行するようにカスタム アクションをシーケンスする方法は?
現在のインストール ステータス (失敗/成功) を返す Windows インストーラー プロパティはありますか?
要素のOnExit
属性は、<Custom>
探しているものです。Before
、、After
およびSequence
属性と相互に排他的であり、次の値を持つことができます: success
、cancel
、。error
suspend
更新:基本的に、これは私が意味するものです:
1) 実行したい作業を実行するカスタム アクションを定義します (失敗データを収集します)。CustomAction MSI テーブルは主キーとして想定されているため、同じターゲットを指す N 個のカスタム アクションを定義する必要があることに注意してくださいId
(DLL CA であると仮定しましょう)。
<CustomAction Id="LogFailureOnCancel" BinaryKey="CustomActions" DllEntry="LogFailure" ... />
<CustomAction Id="LogFailureOnError" BinaryKey="CustomActions" DllEntry="LogFailure" ... />
注: どちらの定義も同じ実際のアクション (DllEntry
属性) を指しています。
2) これらのカスタム アクションを適切にスケジュールします。
<Custom Action="LogFailureOnCancel" OnExit="cancel" />
<Custom Action="LogFailureOnError" OnExit="error" />
Windows インストーラーが許可する範囲で、これはロールバックがスケジュールされたカスタム アクション中にのみ可能です。ただし、ロールバックは遅延スクリプトにのみ適用されるため、InstallInitialize と InstallFinalize の間にスケジュールされたアクションでのみ使用できます。このスケジューリング期間外の即時モード アクションによってインストールが中止された場合、ロールバックは適用されません。
C++ または InstallScript アクションを使用していると仮定すると、ロールバックが有効かどうか、およびロールバック中である場合は、MsiGetModeMSIRUNMODE_ROLLBACKENABLED
を呼び出すことで、またはMSIRUNMODE_ROLLBACK
それぞれを使用して確認できます。