【问题标题】:How to make WiX leave files after uninstall?卸载后如何让WiX留下文件?
【发布时间】:2011-02-07 12:47:09
【问题描述】:

有没有办法在卸载后不删除文件?

【问题讨论】:

    标签: file wix uninstallation


    【解决方案1】:

    像这样设置ComponentPermanent="yes"

    <Component Id="LicenseDoc" Guid="*" Permanent="yes">
        <File Id ="License.rtf" Source="$(var.SolutionDir)Installer\License.rtf" />
    </Component>
    

    备注:

    • 此定义必须在已安装的 MSI 以及升级 MSI 中完成。如果基本 MSI 没有组件 ID,则无论Permanent="yes" 如何,都将删除此文件

    【讨论】:

    • 我将问题发布到 wixusers 邮件列表并得到了相同的答案,但还要注意永久标志(菲尔威尔逊的赞美):只要每个人都意识到永久意味着永久永久。这并不意味着“直到我将设置更改为非永久”。它使该组件在系统上永久存在,除非需要“永久安装程序”,否则我不会使用它。
    • 我会重新讨论这个话题并问:如果您有很多(200 多个)文件要离开怎么办?转到每个组件并添加 Permanent="yes" 或设置 Guid="" 感觉不对。
    • 但这是 WiX 的方式,您描述的是每个文件的有限状态,因此在安装/卸载之前/之后系统应该如何保持零歧义。旧安装程序的问题是他们没有处理所有错误,因此会处于奇怪的状态。 MSI 是一个有状态的进程。
    • 正确的解决方案是编写一个适当的收割脚本,根据您指定的逻辑来管理组件上的永久标志。另请注意,组件 ID 应在此实例中静态定义,否则更改文件源路径将更改组件 guid,您最终会出现不良行为。将所有文件放在一个组件中是一个很大的违规行为,并且会使事情复杂化。
    • 采集脚本名为 heat.exe,已经预装了 WiX。
    【解决方案2】:

    来自 wixusers 邮件列表的 Phil Wilson 的赞美:

    请参阅 MSI SDK 文档以获取组件表 - 将组件 guid 设置为 null(空)。这样做的效果是该组件未注册(因此无法修复)并且不会被卸载。

    【讨论】:

      【解决方案3】:

      我知道这个问题很老,但我只是偶然发现了它,因为我正在寻找一种方法让我的安装程序安装丢失的字体,但在卸载应用程序时不卸载它们。希望它可以帮助其他可能遇到这个问题的人。我对所提供的两种解决方案(空白/空 Guid 或将组件设置为永久)有点不舒服。所以我想出了这个,它对我有用:

      <Feature Id="myFonts" Title="Application Fonts" Level="1">
        <ComponentGroupRef Id="Component_group_with_fonts_to_install" />
        <Condition Level="0">
          <![CDATA[REMOVE = "ALL"]]>
        </Condition>
      </Feature>
      

      这样安装了字体功能,但是卸载时,功能的级别设置为0,所以不管它。

      【讨论】:

        【解决方案4】:

        防止 Windows Installer 在卸载时删除组件的另一种方法是设置空白或空组件 GUID。这将导致组件被安装,但永远不会被跟踪或卸载。

        请参阅MSI SDK documentation:“...如果此列 (ComponentId) 为空,则安装程序不会注册组件,并且安装程序无法删除或修复组件。如果组件仅在安装期间需要,例如清除临时文件或删除旧产品的自定义操作。在将数据文件复制到不需要注册的用户计算机时也可能很有用。"

        【讨论】:

          猜你喜欢
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 2016-07-25
          • 2010-09-16
          • 2013-06-21
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          相关资源
          最近更新 更多