使用WiX构build安装程序。 作为安装过程的一部分,我想将Excel加载项安装到通用Excel加载项文件夹( %APPDATA%\Microsoft\AddIns
)中。 这里是我写的代码的相关部分:
<Directory Id="MicrosoftFolder" Name="Microsoft"> <Directory Id="AddInsFolder" Name="AddIns"> <Component Id="COMP_MyAddInLib" Guid="MY-GUID-HERE"> <File Source="\MyAddInLib.xll" Id="LibMyAddIn" /> <RegistryValue Root="HKCU" Type="string" Key="Software\!(loc.ManufacturerName)\!(loc.ApplicationName)\MyAddIn" Name="INSTALLDIR" Value="[INSTALLDIR]" KeyPath="yes" /> <RemoveFolder Id="RemoveAddInsFolder" On="uninstall" Property="AddInsFolder" /> <RemoveFolder Id="RemoveMicrosoftFolder" On="uninstall" Property="MicrosoftFolder"/> </Component> </Directory> </Directory>
这将生成正确,它确实工作,但是,如果我的加载项是用户的%APPDATA%\Microsoft\AddIns
文件夹中唯一的项目,AddIns文件夹将被删除在卸载。 我不确定这是否会导致Excel(或任何其他Office应用程序)的问题,但显然,由于此文件夹是由Office创build,而不是我的安装过程,我想避免将其删除。
我可以删除两个<RemoveFolder>
标记,但是构build失败并出现两个ICE64错误。
任何想法如何我可以删除我的加载项文件,但保留文件夹结构,并避免构build失败?
如果您并不总是拥有这些文件夹,并且其他内容可能来自其他安装,则不会使用组件中的RemoveFolder标记。
这会给你一些ICE验证警告。 如果你知道你不应该删除这些文件夹(你绝对不拥有%APPDATA%\ Microsoft文件夹),那么你知道你应该把它们留在后面。 您正在安装的组件将被正确删除,因为您拥有该组件,但在这种情况下,请将文件夹留下。
我所要做的是在安装程序项目的发布版本上压制ICE64,但将ICE验证显示为调试。
只要定义
<SuppressIces>ICE64</SuppressIces>
在Release配置下的安装程序的wixproj中。
或者,如果您使用的是Visual Studio,请通过“WixProj属性>工具设置>抑制特定的ICE验证”添加抑制ICE验证。
如果您正在使用cmd行(在您的wix文件中调用light.exe)显式构建,则需要通过switch -sice:ICE64
编辑:看看<RemoveFolder>标签看起来这将不会删除文件夹中仍然有文件或其他文件夹,所以它应该是确定留下这两个RemoveFolder标签在你的组件,但我仍然会考虑删除它们并抑制ICE64验证警告。
你可以做一个自定义的动作,重新制作目录:
ExeCommand="cmd /C \"mkdir %APPDATA%\Microsoft\AddIns\""
我可能会安排到最后,也许就在InstallFinalize之前,以确保它在文件夹被删除后运行。 还要确保忽略返回代码,否则如果文件夹仍然存在,将会失败。