我们有一个wix设置,这是完美的工作到现在为止。最近,我们从Azure Devops的Jenkins搬到我们的CI公司,有些事情发生了一些小小的变化(混淆,.)。但是整个wix解决方案并没有发生太大的变化(我们有了新的特性,所以我们添加了一些组件)。
在进行测试时,我们注意到在jenkins生成的上一个版本(5.1.0)的顶部安装我们的新版本( 5.1.2.x),我们安装了所有的东西,没有错误,只有一个安装程序,但是在安装文件夹中,我们包含在我们的设置中的一些DLL (似乎总是相同的)丢失了(显然,我们不能正确运行我们的应用程序)。
我们宣布产品如下:
<Product Id="*"
Codepage="1252"
Language="1033"
Manufacturer="$(var.MANUFACTURER)"
Name="$(var.PRODUCTNAME)"
UpgradeCode="705E9C74-7192-4F74-B7A4-4DE9428B6FFA"
Version="$(var.ProductVersion)">我们把它作为升级:
<MajorUpgrade Schedule="afterInstallValidate" DowngradeErrorMessage="!(loc.DOWNGRADE_ERROR_MESSAGE)" />
<Upgrade Id="705E9C74-7192-4F74-B7A4-4DE9428B6FFA">
<!--This is necessary to allow upgrading daily builds which will have all the same version but different product id
Ignore the ICE warning on compilation for this issue (the warning can be suppressed too)-->
<UpgradeVersion Property="INSTALLED_PRODUCT_CODES" IncludeMinimum="yes" Minimum="2.12.7" IncludeMaximum="yes" Maximum="$(var.ProductVersion)"/>
</Upgrade>到目前为止,我们已经证实的是:
我尝试在MajorUpgrade步骤中移动afterInstallFinalize,它要求先卸载5.1.0并再次启动。但是,卸载失败。就我所见,我认为5.1.2安装程序已经复制了一些新文件?
所以我的问题是:
发布于 2021-02-04 09:36:02
我不知道为什么,但是把这个添加到我的Product.wxs中可以解决这个问题:
<Property Id="REINSTALLMODE" Value="dmus"/>它基本上告诉wix安装DLL,不管它们是旧的还是新的。
有关重新安装模式的更多信息可以在这里找到:https://learn.microsoft.com/en-us/windows/win32/msi/reinstallmode
默认值是omus,这意味着“如果文件丢失或者是旧版本,请重新安装”。
不确定为什么我的DLL不被认为是“丢失或旧的”,但是在安装之后哪里都找不到。
发布于 2021-02-05 00:48:12
微软文档:在重大升级期间删除文件的原因--如果它们在版本号中向后退
这是一个常见的问题,是由几个不同的因素造成的。通常:
由于您的调整为REINSTALLMODE工作(请浏览该链接),这可能是第一个问题。无论版本如何,这种调整都会覆盖文件--这通常不是一个好主意。您可以查看这个答案以获得信息,并建议使用辅助文件来解决问题。。
针对第1问题的修复包括使用组件文件的1)、2)侵入受影响文件中较高的版本号、3)有些人试图在CostFinalize之前移动RemoveExistingFiles,但这实际上不起作用,而且在文档中是无效的,而4)的“版本说谎”(他们称之为“版本说谎”)--为MSI中的文件设置一个假版本(在InstallShield中使用)。还有5) 修改REINSTALLMODE -和这很糟糕 (“几个问题”部分),因为它影响到整个设置,可以覆盖共享文件并创建不一致的文件版本(一些文件已更新,有些被设置干扰而降级)。6)还可以使用新名称或其他位置安装该文件。然后,您应该更改组件GUID (这就是为什么 -组件GUID引用计数一个绝对路径- GUID不跟随文件周围如果它移动-与一个新的GUID,它有一个“新的身份”)。
问题2的修复方法是让组件GUID在各个版本之间保持一致,或者在RemoveExistingProducts中的早期移动标准动作GUID,以便在安装新产品之前完全卸载整个产品。它有效地解除了从任何组件参考错误或任何其他过去的罪恶的设置。干净的板子。
请参阅先前的答案:
链接:
https://stackoverflow.com/questions/66040741
复制相似问题