使用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也有一些结构可以帮助您进行常见的调整:
- 菲尔·威尔逊(Phil Wilson)从他的书中得到的样本(其他一些主题的其他主题的更多样本):https://github.com/Apress/def-guide-to-win-installer/tree/master/Chapter10。
- 菲尔威尔逊再次与他的Installing Services with Visual Studio sample。
- Chris Painter和他的IsWiX教程:https://github.com/iswix-llc/iswix-tutorials。
通常无需使用自定义操作来安装和配置服务。由于其完全回滚支持和广泛的功能集,内置的MSI功能非常优越。使用自定义操作会使事情变得非常复杂,增加了不必要的风险,并且在回滚期间几乎总是会失败,从而使系统处于无效状态。
MSI表有一个学习曲线 - 有很多选项,但根据我的经验,只有几个设置组合在一起。通常在安装和停止期间停止和重新启动以及卸载时删除和删除。在过去,我添加了自定义操作,只是等待服务正常关闭,但这只是一个等待自定义操作,并不会更改系统。对于我不知道的这种场景,可能有新的Wix功能。
MSI表ServiceInstall和ServiceControl用于安装服务。在Wix中,您处理等效的XML元素:Wix ServiceInstall和Wix ServiceControl以及较新的Wix ServiceConfig和Wix ServiceConfigFailureActions。
您似乎设置的方式存在许多问题:
- InstallFinalize之后的自定义操作不会更改系统,并且它们将无法以管理员权限运行。此外,您已将自定义操作设置为延迟模式,这仅在InstallInitialize和InstallFinalize之间允许 - 这是您引用的错误消息。
- 有些人在InstallFinalize之后使用立即模式自定义操作。根据定义,这始终是一个错误,只有在使用管理员权限运行整个设置时才会起作用。即使这样,当与企业界的SCCM或其他软件分发系统一起分发时,它也常常会失败。
- 在安装期间使用临时文件通常是不合需要正如我在上面评论的那样,这是一种“部署气味”。某些用途是可以的,例如显示徽标和许可协议,但这些也可以编译到设置中并自动删除。
- 作为安装的一部分运行批处理文件非常不可靠且容易出错,如果安装过程中安装失败,可能会对系统进行无法回滚的更改。
RemoveFile table(Wix equivalent)允许您在安装,卸载或两者中删除文件。您不应删除属于关联的Windows Installer组件的文件,因为自我修复可能会将它们放回原处。
我相信,你需要的是:
- 重新考虑使用批处理文件和临时文件。他们最有可能比他们的价值更麻烦。
- 全面了解提升权限和Windows Installer的安全模型以及immediate mode(用户权限)和deferred mode(提升权限)自定义操作之间的区别。 Here is a good article由一位公认的MSI专家提供。
以上是关于使用Wix安装后删除目录和文件的主要内容,如果未能解决你的问题,请参考以下文章