首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在安装新版本的Wix安装之前强制完全卸载?

如何在安装新版本的Wix安装之前强制完全卸载?
EN

Stack Overflow用户
提问于 2021-02-04 06:59:04
回答 2查看 545关注 0票数 0

我们有一个wix设置,这是完美的工作到现在为止。最近,我们从Azure Devops的Jenkins搬到我们的CI公司,有些事情发生了一些小小的变化(混淆,.)。但是整个wix解决方案并没有发生太大的变化(我们有了新的特性,所以我们添加了一些组件)。

在进行测试时,我们注意到在jenkins生成的上一个版本(5.1.0)的顶部安装我们的新版本( 5.1.2.x),我们安装了所有的东西,没有错误,只有一个安装程序,但是在安装文件夹中,我们包含在我们的设置中的一些DLL (似乎总是相同的)丢失了(显然,我们不能正确运行我们的应用程序)。

我们宣布产品如下:

代码语言:javascript
复制
  <Product Id="*"
           Codepage="1252"
           Language="1033"
           Manufacturer="$(var.MANUFACTURER)"
           Name="$(var.PRODUCTNAME)"
           UpgradeCode="705E9C74-7192-4F74-B7A4-4DE9428B6FFA"
           Version="$(var.ProductVersion)">

我们把它作为升级:

代码语言:javascript
复制
<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>

到目前为止,我们已经证实的是:

  • 手动卸载5.1.0并安装5.1.2工程
  • 只安装5.1.2工程
  • 在5.1.0上安装5.1.2会删除一些文件

我尝试在MajorUpgrade步骤中移动afterInstallFinalize,它要求先卸载5.1.0并再次启动。但是,卸载失败。就我所见,我认为5.1.2安装程序已经复制了一些新文件?

所以我的问题是:

  • 如何在从新版本安装任何内容之前强制进行完全卸载
  • 有没有一种方法可以说这个完全卸载是只需要进入一个版本,即<=5.1.0?
EN

回答 2

Stack Overflow用户

发布于 2021-02-04 09:36:02

我不知道为什么,但是把这个添加到我的Product.wxs中可以解决这个问题:

代码语言:javascript
复制
<Property Id="REINSTALLMODE" Value="dmus"/>

它基本上告诉wix安装DLL,不管它们是旧的还是新的。

有关重新安装模式的更多信息可以在这里找到:https://learn.microsoft.com/en-us/windows/win32/msi/reinstallmode

默认值是omus,这意味着“如果文件丢失或者是旧版本,请重新安装”。

不确定为什么我的DLL不被认为是“丢失或旧的”,但是在安装之后哪里都找不到。

票数 0
EN

Stack Overflow用户

发布于 2021-02-05 00:48:12

微软文档在重大升级期间删除文件的原因--如果它们在版本号中向后退

这是一个常见的问题,是由几个不同的因素造成的。通常:

  1. 降低了版本文件的级别。这可能导致文件在更新后丢失,因为文件扫描(成本)记录表明文件永远不应该降级(但升级过程仍然删除旧文件,而不安装新文件-这是一个很大的缺陷)。
  2. 跨安装版本的不一致组件GUID关于分量参考计数。这也可能导致文件在更新后丢失,但原因不同:新设置不理解该文件与以前相同--只是该文件的新版本--因为它具有新GUID形式的“新标识”,因此错误地删除了该文件。一个“错误身份”的案例。

由于您的调整为REINSTALLMODE工作(请浏览该链接),这可能是第一个问题。无论版本如何,这种调整都会覆盖文件--这通常不是一个好主意。您可以查看这个答案以获得信息,并建议使用辅助文件来解决问题。

针对第1问题的修复包括使用组件文件的1)2)侵入受影响文件中较高的版本号、3)有些人试图在CostFinalize之前移动RemoveExistingFiles,但这实际上不起作用,而且在文档中是无效的,而4)的“版本说谎”(他们称之为“版本说谎”)--为MSI中的文件设置一个假版本(在InstallShield中使用)。还有5) 修改REINSTALLMODE -和这很糟糕 (“几个问题”部分),因为它影响到整个设置,可以覆盖共享文件并创建不一致的文件版本(一些文件已更新,有些被设置干扰而降级)。6)还可以使用新名称或其他位置安装该文件。然后,您应该更改组件GUID (这就是为什么 -组件GUID引用计数一个绝对路径- GUID不跟随文件周围如果它移动-与一个新的GUID,它有一个“新的身份”)。

问题2的修复方法是让组件GUID在各个版本之间保持一致,或者在RemoveExistingProducts中的早期移动标准动作GUID,以便在安装新产品之前完全卸载整个产品。它有效地解除了从任何组件参考错误或任何其他过去的罪恶的设置。干净的板子。

请参阅先前的答案:

链接:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66040741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档