5

カスタムアクションがあります

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" />

<InstallExecuteSequence>
      <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom>
</InstallExecuteSequence>

私のカスタムアクションは、バックアップと解決されたデータベースを行います。インストールがキャンセルされた場合、ロールバック (データベースのドロップ) を行う必要があります。やった:

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" />
<CustomAction Id="myActionRollbackId" BinaryKey="myActionRollback" DllEntry="MySimpleAction" Execute="rollback" Return="check" />

<InstallExecuteSequence>
      <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom>
      <Custom Action="myActionRollbackId" Before="myActionId">CHECKBOXCOPYPROP=1</Custom>
</InstallExecuteSequence>

しかし、私はエラーが発生していました。

私がこれを好きなら:

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" />
<CustomAction Id="myActionRollbackId" BinaryKey="myActionRollback" DllEntry="MySimpleAction" Execute="immediate" Return="check" />

<InstallExecuteSequence>
      <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom>
      <Custom Action="myActionRollbackId" After="myActionId">CHECKBOXCOPYPROP=1</Custom>
</InstallExecuteSequence>

カスタム アクション myActionRollbackId が機能します。

インストールがキャンセルされたときにロールバックを実行する方法は? 誰かが私を助けることができますか?

4

2 に答える 2

2

インストール時に実行され、データベースで何かを行うカスタム アクションは延期する必要があります ( Execute='deferred')。対応するロールバック アクションは ですExecute='rollback'。これらのカスタム アクションをスケジュールするときは、ロールバック アクションを最初に実行する必要があります。

また、条件が適切に設定されていることを確認してください。

于 2012-09-24T07:24:52.920 に答える