【问题标题】:Wix throws away components that are marked as NeverOverWrite="yes"Wix 会丢弃标记为 NeverOverWrite="yes" 的组件
【发布时间】:2017-12-11 19:16:53
【问题描述】:

我创建了一个安装程序来升级我们的软件,但由于某种原因,升级时删除了 XML 配置文件(我们软件的那些)。

如果软件的所有功能都升级了,就会出现这种情况。 我们的软件是存档类型的东西。如果我只安装该功能并升级它,一切都很好。

但是,如果我安装存档随附的所有服务并升级它们,那么所有配置文件(并且每个都位于不同的文件夹中!)都消失了。

举个例子:

<ComponentGroup Id="AutoArchiveTool" Directory="AutoArchiverFolder">
     <Component Id="C_AutoArchivingTool_Gateway_exe_config" NeverOverwrite="yes" Guid="{A62D5200-FDE0-4DA1-A04A-7FBDACEA83B2}">
       <File Id="F_AutoArchivingTool_Gateway_exe_config" Source="$(var.Gateway.TargetDir)Gateway.exe.config" KeyPath="yes"/>
     </Component>
... more script
</ComponentGroup>

如果您记录安装程序,您甚至可以看到它被识别为“永不覆盖”:

Disallowing installation of component: {A62D5200-FDE0-4DA1-A04A-7FBDACEA83B2} since the keyfile exists and the component is marked to never overwrite existing installations

但升级后它就消失了。我错过了什么? 我已经看到了“永久”属性,但这不是我想要的。我希望安装程序在升级期间单独保留配置文件。删除后不要留下它们(配置文件)。

【问题讨论】:

标签: wix windows-installer upgrade


【解决方案1】:

NeverOverwrite 并不意味着“不卸载”所以:

a) 如果组件 ID 在原始安装和新安装之间发生更改,则共享将无法按您的意愿工作,并且引用计数将减少并且文件将被删除,此时升级计划为“延迟” ,例如 afterInstallExecute。

b) 如果提前安排了升级(例如 afterInstallInitialize),首先卸载所有旧产品,然后安装新产品。您还没有说明升级的顺序,但有时 Windows Installer 在“早期”升级中搞砸了:它决定文件不会被覆盖,但当安装结果是升级。在这种情况下,您的升级将完成并且文件将丢失。如果您遇到此问题,则产品修复将从产品的 版本恢复文件(因为它是组件的当前所有者)。这无济于事。

因此,请确保组件 ID 未更改,并且您的升级计划延迟,例如 afterInstallExecute。此外,使用详细日志记录进行升级以验证发生了什么。

话虽如此,NeverOverwrite 通常用于解决不存在的问题。文件覆盖规则(由“后期”升级调用)表示修改后的文件不会被覆盖:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

所以如果第一个安装程序安装了文件,然后它被应用程序更新,那么你的升级运行它不会替换修改过的文件,并且不需要设置 NeverOverwrite。

【讨论】:

  • 我已将序列更改为“afterInstallExecute”,现在它可以工作了!所以谢谢你!
  • 我想看看我是否可以松开“NeverOverwrite”。该文件是没有版本的 xml,因此安装程序应根据 msdn 文章将它们单独保留。但是当我这样做时,我在日志中得到了这个:Action 13:11:03: ExecXmlFile. ExecXmlFile: Error 0x8007006e: failed to load XML file: C:\Program Files (x86)\Company\Services\SomeSource\SomeSource.exe.config Error 25531. Failed to open XML file C:\Program Files (x86)\Company\Services\SomeSource\SomeSource.exe.config, system error: -2147024786。那可能是util:XmlFile 失败了。但为什么?文件已经在系统上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2021-11-12
  • 2019-01-15
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多