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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Wix安装后删除目录和文件相关的知识,希望对你有一定的参考价值。

在安装过程中,我需要在InstallExecuteSequence标记中配置的自定义操作中的一些额外文件asl 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>

如果我创建自定义操作

ExeCommand="cmd /C RD "somedir" /s /q"

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

 <Custom Action="CLEANTEMP" After="InstallFinalize" />

我收到了构建错误:

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
答案

更新:不知道为什么这只是刚刚投票。以下摘要是合理的建议。也许是缺少样本?我会添加几个链接。另外:可能存在需要自定义操作来调整服务安装的情况,但如果您正确设计服务,这很少是必要的 - WiX也有一些结构可以帮助您进行常见的调整:


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

MSI表有一个学习曲线 - 有很多选项,但根据我的经验,只有几个设置组合在一起。通常在安装和停止期间停止和重新启动以及卸载时删除和删除。在过去,我添加了自定义操作,只是等待服务正常关闭,但这只是一个等待自定义操作,并不会更改系统。对于我不知道的这种场景,可能有新的Wix功能。

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

另一答案

您似乎设置的方式存在许多问题:

  • InstallFinalize之后的自定义操作不会更改系统,并且它们将无法以管理员权限运行。此外,您已将自定义操作设置为延迟模式,这仅在InstallInitialize和InstallFinalize之间允许 - 这是您引用的错误消息。
  • 有些人在InstallFinalize之后使用立即模式自定义操作。根据定义,这始终是一个错误,只有在使用管理员权限运行整个设置时才会起作用。即使这样,当与企业界的SCCM或其他软件分发系统一起分发时,它也常常会失败。
  • 在安装期间使用临时文件通常是不合需要正如我在上面评论的那样,这是一种“部署气味”。某些用途是可以的,例如显示徽标和许可协议,但这些也可以编译到设置中并自动删除。
  • 作为安装的一部分运行批处理文件非常不可靠且容易出错,如果安装过程中安装失败,可能会对系统进行无法回滚的更改。

RemoveFile tableWix equivalent)允许您在安装,卸载或两者中删除文件。您不应删除属于关联的Windows Installer组件的文件,因为自我修复可能会将它们放回原处。

我相信,你需要的是:

  1. 重新考虑使用批处理文件和临时文件。他们最有可能比他们的价值更麻烦。
  2. 全面了解提升权限和Windows Installer的安全模型以及immediate mode(用户权限)和deferred mode(提升权限)自定义操作之间的区别。 Here is a good article由一位公认的MSI专家提供。

以上是关于使用Wix安装后删除目录和文件的主要内容,如果未能解决你的问题,请参考以下文章

卸载 WiX 时删除文件

Wix - 如何从安装目录安装后运行exe文件?

如何使用 WiX 从源代码重建完全相同的 msi 文件?

WiX 安装程序在卸载时删除文件,但在升级时不删除

Wix 自定义卸载操作 - 如何在 msi 删除文件之前运行

卸载时未删除Windows服务(WIX 3)