如何添加仅在卸载时(通过MSI)发生的Wix自定义操作?

如何添加仅在卸载时(通过MSI)发生的Wix自定义操作?

我想修改MSI安装程序(通过维克斯)在卸载时删除整个目录。

我明白RemoveFileRemoveFolderWix中的选项,但这些选项不足以递归删除安装后创建内容的整个文件夹。

我注意到类似的堆栈溢出问题卸载Wix时删除文件,但我想知道是否可以更简单地使用对批处理脚本的调用来删除文件夹。

这是我第一次使用Wix,我仍然掌握自定义动作..卸载时运行批处理脚本的自定义操作的基本示例是什么?


阿波罗的战车
浏览 845回答 3
3回答

森栏

您可以使用自定义操作来完成此操作。您可以在下面的自定义操作中添加参考。<InstallExecuteSequence>:<InstallExecuteSequence>...&nbsp;&nbsp;<Custom&nbsp;Action="FileCleaner"&nbsp;After='InstallFinalize'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Installed&nbsp;AND&nbsp;NOT&nbsp;UPGRADINGPRODUCTCODE</Custom>然后,您还必须在<Product>:<Product>&nbsp;...&nbsp;&nbsp;<CustomAction&nbsp;Id='FileCleaner'&nbsp;BinaryKey='FileCleanerEXE'&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExeCommand=''&nbsp;Return='asyncNoWait'&nbsp;&nbsp;/>其中FileCleanerEXE是一个二进制文件(在我的例子中是一个执行自定义操作的小c+程序),它也定义在<Product>:<Product>&nbsp;...&nbsp;&nbsp;<Binary&nbsp;Id="FileCleanerEXE"&nbsp;SourceFile="path\to\fileCleaner.exe"&nbsp;/>真正的诀窍是Installed AND NOT UPGRADINGPRODUCTCODE条件的自定义操作,您的操作将在每次升级时运行(因为升级实际上是卸载,然后重新安装)。如果您正在删除文件,则可能不希望在升级期间需要该文件。附带说明:我建议使用类似C+程序这样的程序来执行操作,而不是使用批处理脚本,因为它提供了强大的功能和控制-而且在安装程序运行时,您可以防止“cmd提示”窗口闪烁。

森林海

批处理脚本的最大问题是当用户单击Cancel(或安装过程中出错)时处理回滚。处理此方案的正确方法是创建一个CustomAction,将临时行添加到RemoveFiles表中。这样,Windows安装程序就可以为您处理回滚情况。当你看到解决方案时,它会变得疯狂的简单。无论如何,要使操作仅在卸载期间执行,请添加一个条件元素:REMOVE&nbsp;~=&nbsp;"ALL"表示比较不区分大小写(尽管我认为一切总是高高在上的)。见有关条件语法的MSISDK文档想了解更多信息。PS:从来没有一个情况下,我坐下来认为,“哦,批处理文件将是一个很好的解决方案,在一个安装包。”实际上,找到一个包含批处理文件的安装包只会鼓励我将产品退回退款。
打开App,查看更多内容
随时随地看视频慕课网APP