如果CustomAction中有错误,如何强制WiX卸载

vic*_*tor 3 windows-installer custom-action wix

我有以下CustomAction:

<CustomAction Id="ActionName"
              After="InstallFinalize">
  <![CDATA[NOT Installed AND (VSTORUNTIME4="#1")]]>
</CustomAction>
Run Code Online (Sandbox Code Playgroud)

问题是当我返回ActionResult.Failure时,CustomAction中存在一个案例.在这种情况下,安装程序将显示错误消息并说安装失败,但应用程序仍然部分安装(文件已经在Program Files中,应用程序显示在卸载程序中).

我希望如果我返回ActionResult.Failure,那么安装将被中止并卸载.如果自定义操作在默认的Visual Studio安装程序中失败,会发生这种情况,我认为这更有意义.

如果自定义操作失败,有人知道如何触发卸载吗?我是否需要为WiX XML添加额外的东西?

Rob*_*ing 7

目前,您的自定义操作是在安装事务完成后安排的(After ="InstallFinalize").可以回滚的唯一自定义操作是在"InstallInitialize"和"InstallFinalize"之间安排的"延迟"自定义操作.对于延迟的自定义操作,您还应该在其之前安排回滚自定义操作.


Chr*_*ter 3

默认情况下,Windows Installer 支持事务性故事,并且能够回滚对系统的所有更改。问题是,您的自定义操作在做什么以及它们在哪里/如何安排?

如果您的 CustomActions 正在更改计算机的状态,则它们需要以事务方式执行此操作,否则安装程序无法回滚您的代码引起的进程外更改。

这里有几篇不错的阅读文章:

Windows Installer 中自定义操作的安装阶段和脚本内执行选项

Zataoca:自定义操作类别

Zataoca:自定义操作应该由数据驱动。

Zataoca:自定义行为(通常)是承认失败。