如何让Wix更新以前安装的程序版本
我用Wix编写了一个安装程序,安装我的程序效果很好。 现在我需要更新它,所以我增加了版本号,但当我在旧程序上安装新程序时,它会抱怨已经安装了旧版本,并告诉我先卸载它如何让Wix更新以前安装的程序版本,wix,installation,Wix,Installation,我用Wix编写了一个安装程序,安装我的程序效果很好。 现在我需要更新它,所以我增加了版本号,但当我在旧程序上安装新程序时,它会抱怨已经安装了旧版本,并告诉我先卸载它 如何在重新安装之前更新或自动卸载它?您需要使用升级表: <Upgrade Id='15E2DAFB-35C5-4043-974B-0E342C25D76A'> <UpgradeVersion Property='OLDVERSIONFOUND' IncludeMinimum='no' Minimum='0.
如何在重新安装之前更新或自动卸载它?您需要使用升级表:
<Upgrade Id='15E2DAFB-35C5-4043-974B-0E342C25D76A'>
<UpgradeVersion Property='OLDVERSIONFOUND' IncludeMinimum='no' Minimum='0.0.0.0' />
</Upgrade>
您还需要添加一个操作:
<InstallExecuteSequence>
<LaunchConditions After='AppSearch' />
<RemoveExistingProducts After='InstallValidate' />
</InstallExecuteSequence>
我查看了上面提到的所有帖子,但仍然花了很长时间试图让它发挥作用 步骤3中的提示有很大帮助:您需要一个新的
产品/@Id
来禁用消息“此产品的另一个版本已安装”
我使用了此升级部分(产品的子项):
还要注意,显然,只有版本号的前三个组件用于检查升级…只需将此元素放在
产品
元素下:
<MajorUpgrade AllowDowngrades="yes" />
更多信息在我觉得提供的答案没有一个是完整的或独立的,所以在我穿过这片沼泽地之后,以下是我认为必要的步骤,以使更新(完全不言而喻)要求生效:
<Product Id="*" ...>
我试过这个,它对我有效
它将不会降级您的产品。对于那些新变量(即
$(var.property)
语法);嘿,这正是我安装的方式。然后,我注意到每次安装的控制面板程序中都有一个条目。我尝试使用一个固定的产品Id,这让我在谷歌上搜索这个答案。结合Randy Eppinger的评论(必须至少增加版本的第三位数字),您可以充分利用这两个方面。请注意,如果您有多个项目文件(.wxs)文件,此解决方案将不起作用。Wix工具(灯)将抱怨重复的升级代码(GUID)。我使用“MajorUpgrade”来解决此问题教程链接已断开,但现在很好:Thx,我更正了断开的链接。感谢您修复此海报的链接:-)不存在,请提供建议。我在VS 2013中使用wix 3.8。我认为.wxs文件的结构不同,因此不确定“notthere”是什么意思。但是您是否定义了您的文件(请参见带有的片段)?回答得很好。我建议进一步阅读:和@KoenVanLooveren:您需要用您自己的项目特定信息替换MyAssemblyDll及其路径(在我的示例中,001_MyApplication.MyAssembly将是同一解决方案中的项目名称)。请注意,这只是建议如何保持版本递增(将其绑定到执行自动递增的程序集版本)。要进行测试,您也可以忽略所有这些,然后编写
。请再读一遍第2节,看一看。最后是一位真正解释WIX工作原理的人。文档完全失败了。将产品ID更改为*
对我的案例有效。
<MajorUpgrade AllowDowngrades="yes" />
<Product Id="*" ...>
<Product Version="!(bind.FileVersion.MyAssemblyDll)" ...>
<File Id="MyAssemblyDll" Name="$(var.001_Application.MyAssembly.TargetFileName)" Source="$(var.001_Application.MyAssembly.TargetPath)" />
<Product UpgradeCode="f4d7f199-28f6-45d5-ad99-7c62938274be" ...>
<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<?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>