我正在使用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动作之后排序),并且项目无法构建。
你可能是调度CA错误。如果不看内置MSI中的InstallExecuteSequence表,很难确定。 你是说Rollback在InstallFinalize之前,Deferred在Rollback之后。 这可能会引起混淆。
相反,你可以说Deferred在InstallFinalize之前,Rollback在Deferred之前。