【问题标题】:Prevent WiX from deleting MS Office AddIns folder on uninstall防止 WiX 在卸载时删除 MS Office AddIns 文件夹
【发布时间】:2016-04-12 18:43:45
【问题描述】:

使用 WiX 构建安装程序。作为安装过程的一部分,我想将 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 文件夹中的唯一项目,则加载项文件夹会在卸载时被删除。我不确定这是否会导致 Excel(或任何其他 Office 应用程序)出现问题,但显然,由于此文件夹是由 Office 创建的,而不是我的安装过程,我想避免删除它。

我可以删除两个 &lt;RemoveFolder&gt; 标记,但构建失败并出现两个 ICE64 错误。

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

【问题讨论】:

    标签: windows wix installation


    【解决方案1】:

    如果您不始终拥有这些文件夹,并且其中可能有来自其他安装的其他内容,我不会在您的组件中使用 RemoveFolder 标签。

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

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

    只要定义

    <SuppressIces>ICE64</SuppressIces>
    

    在您的发布配置下的安装程序的 wixproj 中。

    如果您使用的是 Visual Studio,或者通过“WixProj 属性 > 工具设置 > 抑制特定 ICE 验证”添加抑制 ICE 验证。

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

    编辑:看一下 标记,这似乎将 not 删除其中仍有文件或其他文件夹的文件夹,因此将这两个 RemoveFolder 标记留在您的组件,但我仍然会考虑删除它们并取消 ICE64 验证警告。

    【讨论】:

    • 两个答案都很好,但我喜欢这个,因为我认为这是最安全的解决方案。我宁愿保留不是由我的安装过程创建/拥有的文件夹。我很惊讶没有更好的内置机制来解决这个问题,但抑制 ICE64 错误似乎是最好的方法。感谢您的帮助。
    【解决方案2】:

    您可以执行一个自定义操作来重新制作目录:

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

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

    【讨论】:

    • 我对此进行了试验,这似乎是一个可行的解决方案。我接受另一个答案只是因为我认为它不会改变文件夹结构更安全。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2011-11-23
    • 1970-01-01
    • 2012-11-29
    • 2011-05-08
    • 2010-10-17
    • 2014-07-08
    相关资源
    最近更新 更多