带有 WIX 的 MSI:设置 REINSTALLMODE="amus" 触发器 "LGHT1076: ICE40: REINSTALLMODE is defined in the Property table. This may cause difficulties"

MSI with WIX: setting REINSTALLMODE="amus" triggers "LGHT1076: ICE40: REINSTALLMODE is defined in the Property table. This may cause difficulties"

我们使用 WIX 3 来编写 MSI 安装程序。除了我们自己的 dll,我们还提供了很多第三方 dll(包括子依赖项)。我们经常需要降级其中一个第三方 dll。

使用默认的 REINSTALLMODE“omus”,当用户 运行 安装程序更新现有应用程序时,这些 dll 神奇地消失了。 因此,我们通过在 WIX 中使用此 XML-Element 将 REINSTALLMODE 更改为 amus(默认为 omus):

 <Property Id="REINSTALLMODE" Value="amus"/>

这解决了问题,但现在,编译器发出警告:“警告 LGHT1076:ICE40:REINSTALLMODE 在 属性 table 中定义。这可能会造成困难。”对我们来说,这意味着什么并不完全清楚。

我知道当您共享 dll 时,REINSTALLMODE="amus" 会出现问题。我们的产品都是独立的,none 共享任何 dll(并且安装程序仅支持 Install/Uninstall/Update,无修复)。

我不清楚这些警告现在对我们的产品意味着什么。 “amus”现在安全吗? 我找到了一些解释,包括一系列缺点:

列出的大部分缺点仅与共享文件有关,不适用于我们,但其他一些不太清楚:

can downgrade or wipe-out settings in non-versioned files and registry settings (note to self: test this again, there are complexities with component settings

有没有人知道在没有共享文件时设置 REINSTALLMODE="amus" 的陷阱? 或者换句话说,我想知道 REINSTALLMODE="amus" 对于没有共享文件的 MSI 安装程序是否安全。

编辑:还没有找到任何新信息,但我们发现在某些情况下当我们切换到“Amus”时,一个独立的 msi 包是 instable。当我们正常地 运行 安装程序时它起作用了,但是当我们通过命令行 运行 它时 installation/update 失败了(由 C# 代码触发)。所以对我们来说,切换到 amus 不是一个选项 :-( 从下面的答案我认为问题不是 amus 本身,而是在构建时设置重新安装模式,这实际上不受支持。(不知道为什么,以我最少的理解我会猜测如果在构建时设置并且从未更改过的东西通常更 stable)

警告与值“amus”无关。该警告是关于将 REINSTALLMODE 属性 硬编码为任何值。 REINSTALLMODE 只意味着在运行时设置,而不是构建时。 Windows 安装程序(安装 MSI 的代码)未设计用于处理 MSI 中定义的 REINSTALLMODE 属性。官方文档是 https://docs.microsoft.com/en-us/windows/win32/msi/ice40.

Defining the REINSTALLMODE property in .msi file can lead to unexpected behavior. To fix this error, do not define this property.