当取消MSI安装时,没有调用回滚自定义操作。

问题描述 投票:0回答:1

我正在使用Wix Toolset v3.11创建MSI。

我使用了两个自定义动作,一个是Deferred自定义动作,另一个是对应的Rollback自定义动作。我正在为这两个自定义动作调用一个控制台应用程序exe文件。如果我关闭了控制台应用程序cmd窗口,回滚自定义动作就会被触发,并且工作正常。

但是当我通过点击进度对话框的 "取消 "按钮来取消MSI安装时,回滚的自定义操作没有触发。

这里是示例代码。

<CustomAction Id="DoSomething" Execute="deferred" FileKey="abc.exe" ExeCommand="xyz" />
<CustomAction Id="DoSomething_Rollback" Execute="rollback" FileKey="abc.exe" ExeCommand="xyz_rollback" />

<InstallExecuteSequence>
      <Custom Action="DoSomething_Rollback" Before="InstallFinalize">TrueCondition</Custom>
      <Custom Action="DoSomething" After="DoSomething_Rollback">TrueCondition</Custom>
</InstallExecuteSequence>

我试过这里提到的解决方案 WIX - 在取消安装时运行自定义操作。

当我设置OnExit="Cancel "时,它开始出错(DoSomething_Rollback是一个自定义的动作,它的源代码是一个已安装的文件。 它必须在CostFinalize动作之后排序),并且项目无法构建。

wix windows-installer custom-action
1个回答
0
投票

你可能是调度CA错误。如果不看内置MSI中的InstallExecuteSequence表,很难确定。 你是说Rollback在InstallFinalize之前,Deferred在Rollback之后。 这可能会引起混淆。

相反,你可以说Deferred在InstallFinalize之前,Rollback在Deferred之前。

© www.soinside.com 2019 - 2024. All rights reserved.