防止WiX在卸载时删除MS Office AddIns文件夹

时间:2016-04-12 18:43:45

标签: windows wix installer

使用WiX构建安装程序。作为安装过程的一部分,我想在通用Excel加载项文件夹(%APPDATA%\Microsoft\AddIns)中安装Excel加载项。以下是我撰写的相关代码部分:

<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创建的,而不是我的安装过程,因此我希望避免将其删除。 / p>

我可以删除两个<RemoveFolder>代码,但构建失败并出现两个ICE64错误。

有关如何删除加载项文件但保留文件夹结构并避免构建失败的任何想法?

2 个答案:

答案 0 :(得分:1)

如果您总是拥有这些文件夹,并且其他安装中可能还有其他内容,我将不会在您的组件中使用RemoveFolder标记。

这将为您提供一些ICE验证警告。如果你知道你不应该删除这些文件夹(你绝对不拥有%APPDATA%\ Microsoft文件夹),那么你知道你应该把它们抛在脑后。您正在安装的组件将被正确删除,因为您拥有它,但在这种情况下,它是正确的,留下文件夹。

我要做的是在安装程序项目的发布版本上禁止ICE64,但保留ICE验证以进行调试。

只需定义

<SuppressIces>ICE64</SuppressIces>

在Release配置下的安装程序的wixproj中。

如果您使用的是Visual Studio,请通过“WixProj属性&gt;工具设置&gt;禁止特定ICE验证”添加抑制ICE验证。

如果使用cmd行显式构建(在wix文件上调用light.exe),则需要传递开关-sice:ICE64

编辑:看看&lt; RemoveFolder&gt;标记它似乎删除仍然包含文件或其他文件夹的文件夹,因此在组件中保留这两个RemoveFolder标记应该没问题,但我仍然会考虑删除它们并压制ICE64验证警告。

答案 1 :(得分:0)

您可以执行仅重新创建目录的自定义操作:

ExeCommand="cmd /C \"mkdir %APPDATA%\Microsoft\AddIns\""

我可能会在最后安排它,也许就在InstallFinalize之前,以确保它在文件夹被删除后运行。还要确保忽略返回代码,否则如果文件夹仍然存在则会失败。