gpt4 book ai didi

wix - 如何让 Wix 更新以前安装的程序版本

转载 作者:行者123 更新时间:2023-12-02 09:07:46 27 4
gpt4 key购买 nike

我用 Wix 编写了一个安装程序,安装我的程序效果很好。现在我需要更新它,所以我提高了版本号,但是当我去安装新程序而不是旧程序时,它提示已经安装了旧版本并告诉我先卸载它。

如何让它更新或在重新安装之前自动卸载?

最佳答案

我觉得所提供的答案都不是完整的或独立的,因此在探索了这个沼泽之后,我认为以下是获得更新工作的(完全不言而喻的)要求所必需的步骤:

  1. 确保每次构建时您的产品 ID 都会发生变化。如果不这样做,您将始终收到OP提到的“已安装”消息。

    <Product Id="*" ...>
  2. 每次产品本身发生更改时,请更改产品版本。我认为最好的选择是将其绑定(bind)到程序集版本(也应该自动递增),但当然您也可以手动更改它。如果您在第 4 点中使用AllowSameVersionUpgrades 属性,则并不严格要求执行此步骤,但我敢说,在任何情况下保持产品版本不变都是不好的做法。

    <Product Version="!(bind.FileVersion.MyAssemblyDll)" ...>
    <File Id="MyAssemblyDll" Name="$(var.001_Application.MyAssembly.TargetFileName)" Source="$(var.001_Application.MyAssembly.TargetPath)" />
  3. 保持您的 UpgradeCode 不变(例如):

    <Product UpgradeCode="f4d7f199-28f6-45d5-ad99-7c62938274be" ...>
  4. 添加 MajorUpgrade 元素(从 Wix 3.5.1315.0 开始)。要避免 MajorUpgrade 将忽略产品版本的修订号更改的问题,请添加AllowSameVersionUpgrades(或者如果您更喜欢AllowDowngrades)属性。这样,您将能够从例如升级到1.0.0.71.0.0.8。不仅仅是从 1.0.7.01.0.8.0。如果您不这样做,您可能会在“程序和功能”中看到多个安装。

    <MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

这是我的整个 .wix 文件(相关部分,导致用于产品绑定(bind)的程序集的两个片段大部分是可选的,为了说明,任何可以获取程序集的方法都可以):

<?xml version="1.0" encoding="UTF-8"?>
<?define ProductVersion="!(bind.FileVersion.MyAssemblyDll)"?>
<?define UpgradeCode="f4d7f199-28f6-45d5-ad99-7c62938274be"?>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Product
Id="*"
Name="My Product's name"
Language="1033"
Version="$(var.ProductVersion)"
Manufacturer="My company"
UpgradeCode="$(var.UpgradeCode)"
Codepage="1252">

<Package
InstallerVersion="200"
Compressed="yes"
InstallScope="perUser"
Description="My product description"
Manufacturer="My company"
Languages="1033"
SummaryCodepage="1252"
InstallPrivileges="limited" />

<MajorUpgrade AllowSameVersionUpgrades="yes"
DowngradeErrorMessage="A newer version of [ProductName] is already installed. If you are sure you want to downgrade, remove the existing installation via Programs and Features." />

</Product>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="LocalAppDataFolder">
<Directory Id="INSTALLFOLDER" Name="My Install Dir" >
<Component Id="INSTALLFOLDER" Guid="f6ba8a12-6493-4911-8edd-dce90e1d8e8b" >
<RemoveFolder On="both" Id="INSTALLFOLDER"/>
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="My Registry value" />
</Component>
</Directory>
</Directory>
</Directory>
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" >
<Component Id="ProductComponent" Guid="1939f0f5-19f6-498b-bf95-8f1c81501294" DiskId="1" Directory="INSTALLFOLDER" >
<File Id="MyAssemblyDll" Name="$(var.001_MyApplication.MyAssembly.TargetFileName)" Source="$(var.001_MyApplication.MyAssembly.TargetPath)" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>

关于wix - 如何让 Wix 更新以前安装的程序版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/500703/

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