gpt4 book ai didi

Wix/MSI - 如何避免安装相同的 MSI 两次

转载 作者:行者123 更新时间:2023-12-03 23:25:02 27 4
gpt4 key购买 nike

我的安装程序用 WiX 语言编码。它支持主要的升级机制。一个特殊的要求是 相同的 MSI 文件将无法安装两次。

现在是棘手的部分:如果用户安装然后再次尝试安装它(UI 模式),安装程序进入维护模式,一切正常(更改/修复将显示为禁用。)

但是,当在静默模式下按照我们的用例状态安装时

msiexec.exe/i installer.msi/qn

第二次安装将继续正常安装(我们不想要这个!)

需要注意的一些事情是:

在第二次安装的日志文件中,将跳过序列“ FindRelatedProducts ”(如微软文档 http://msdn.microsoft.com/en-us/library/windows/desktop/aa368600(v=vs.85).aspx 中的状态)

我也在这里研究了一下 http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/UpgradeVersion-is-not-detecting-the-same-version-preventing-downgrades-td5875840.html有很好的信息,声称对于这种情况,我们可以使用已安装的属性来检测产品是否已安装...

但是,我被困在这里:因为我必须避免安装与当前版本相同的先前或相同版本并允许更大的升级,我如何在 WiX 中实现这一点?

谢谢你的帮助!

最佳答案

首先,您应该修复升级代码:

<?define ProductVersion = "0.0.2.3"?>
<?define UpgradeCode = "PUT-GUID-HERE"?>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<Product Name="Asd" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Me" Id="*" UpgradeCode="$(var.UpgradeCode)">

请注意,每次构建安装时都会重新创建产品代码(不使用 GUID,而是使用星号)。

基本信息是产品版本和升级代码。产品代码标识特定的部署版本,而升级代码标识产品发布的“家族”。升级代码相同的软件可以相互切换。不能同时安装具有相同产品代码的软件。

这是升级软件的技巧:
<Upgrade Id="$(var.UpgradeCode)">
<!-- Detect older product versions -->
<UpgradeVersion OnlyDetect="no" IncludeMinimum="yes" IncludeMaximum="yes" Minimum="0.0.1" Maximum="$(var.ProductVersion)" Property="PREVIOUSVERSIONSINSTALLED"/>
<!-- Detect newer product versions -->
<UpgradeVersion OnlyDetect="yes" IncludeMinimum="no" Minimum="$(var.ProductVersion)" Property="NEWERVERSIONDETECTED"/>
</Upgrade>
<!-- Exits successfully in the case newer version are already installed -->
<CustomActionRef Id="WixExitEarlyWithSuccess"/>

通过使用上述标记,您可以告诉 Wix,当他发现具有相同 UpgradeCode 的产品但安装的产品的版本大于当前版本时中止安装,但如果他发现产品具有相同的升级代码,则开始安装(升级当前版本)相同的 UpgradeCode 和已安装的版本低于当前版本。

IncludeMinimum 和 IncludeMaximum 应该可以解决问题,允许升级跳过当前版本。

Wix 不安装相同的产品:您应确保已安装软件和 MSI 打包软件的产品代码相同:如果它们不同,则它们是不同的部署软件。除此之外,如果产品具有与 MSI 相同的产品代码,则安装提供修复/更改选项:要禁用它们,您必须使用 Wix 包的属性表,通过引入 ARP_ 变量(您可以禁用修复、更改和卸载,还可以设置制造商联系人和其他属性)。

这是 ARP variable list .我不知道在静默模式下安装时它们的行为是什么,但是如果您从命令行调用 msiexec,则有一个特定的修复选项来发出修复 (/f),那么如果您是,它如何自动修复您的产品不要求?

关于Wix/MSI - 如何避免安装相同的 MSI 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com