使用 Wix 安装后删除目录和文件

Den*_*nis 5 installation windows-installer wix

在安装过程中,我需要在自定义操作中添加一些额外的文件,这些文件在 InstallExecuteSequence 标记中配置为 After="InstallFinalize"。

使用文件后,我希望删除文件(和目录)。

我怎样才能做到这一点?

我的 InstallExecuteSequence 看起来像这样:

  <InstallExecuteSequence>
     <Custom Action="UNINSTALLSERVICE"
             After="InstallInitialize">REMOVE="ALL"</Custom>
     <Custom Action="CLEANUP"
             Before="RemoveFiles">REMOVE="ALL"</Custom>
     <Custom Action="INSTALLSERVICE"
             After="InstallFinalize" />
  </InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

如果我创建一个自定义操作

ExeCommand="cmd /C RD "somedir" /s /q"
Run Code Online (Sandbox Code Playgroud)

并将其添加到序列中,如下所示:

 <Custom Action="CLEANTEMP" After="InstallFinalize" />
Run Code Online (Sandbox Code Playgroud)

我收到构建错误:

Error   596 ICE77: CLEANCONFIG is a in-script custom action.  
It must be sequenced in between the InstallInitialize action 
and the InstallFinalize action in the InstallExecuteSequence table
Run Code Online (Sandbox Code Playgroud)

Ste*_*mul 1

更新:不知道为什么这刚刚被否决。下面的总结是合理的建议。也许是缺少样本?我将添加几个链接。另外:在某些情况下,可能需要自定义操作来调整服务安装,但如果您正确设计服务,则很少需要这样做 - WiX 还具有帮助您进行常见调整的结构:


通常不需要使用自定义操作来安装和配置服务。由于其完整的回滚支持和广泛的功能集,内置的 MSI 功能非常优越。使用自定义操作会使事情变得非常复杂,增加不必要的风险,并且在回滚过程中几乎总是会失败,使系统处于无效状态。

MSI 表有一个学习曲线 - 有很多选项,但根据我的经验,只有少数设置组合在一起才有意义。通常在安装过程中停止和重新启动,在卸载及其变体过程中停止和删除。过去,我添加了自定义操作只是为了等待服务正确关闭,但这只是等待自定义操作,不会更改系统。可能有我不知道的针对这种情况的新 Wix 功能。

MSI 表ServiceInstallServiceControl用于安装服务。在 Wix 中,您处理等效的 XML 元素:Wix ServiceInstallWix ServiceControl以及较新的Wix ServiceConfigWix ServiceConfigFailureActions