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

时间:2014-07-14 10:45:13

标签: wix installer windows-installer

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

2 个答案:

答案 0 :(得分:1)

  

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

     

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

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

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

答案 1 :(得分:0)

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

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

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

我相信,你需要的是:

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