我的项目需要能够同时安装2个版本或更多版本。 据我所知,我发现的解决方案是更改每个安装程序版本的升级代码。
然而我想自动这样做。在常规GUID中我只使用“*”但这不适用于upgradecode。 有没有办法在每个wix预建或任何其他解决方案中生成新的升级代码?
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Bundle Name="Prog" Version="1.2.1.16" Manufacturer="Gilad Corporation" UpgradeCode="{7E71F945-BA46-4872-A6B2-AF992FFDF2D0}">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="..\SetupProject\Gilad.rtf" />
</BootstrapperApplicationRef>
<Chain>
<!-- TODO: Define the list of chained packages. -->
<PackageGroupRef Id="Netfx45FullPackage" />
</Chain>
</Bundle>
答案 0 :(得分:4)
如果您想提供应用程序的不同版本/语言版本,或者您想要并排安装相同的设置,我不是100%确定。听起来你想要实现后者。让我试着简要解释两种情况。
首先是基础:
不同的应用程序版本/语言: 如果你想要的是安装一个不同语言版本的设置 - 比如你提供英语,法语和德语版本,你可以通过保持所有这些版本的升级代码相同,但使用不同的产品代码和包代码来实现每个设置。如果计算机上已存在另一个设置,则允许每个设置轻松卸载另一个设置。
并排安装:我不喜欢这个概念,因为在我看来,它往往表明设置设计中存在错误,但“实例转换”的概念应该能够实现你可能会提到的。
<InstanceTransforms Property="INSTANCEID">
<Instance Id="Install2" ProductCode="*"
UpgradeCode="guid-goes-here" ProductName="Product" />
</InstanceTransforms>
答案 1 :(得分:4)
回答“如何自动生成UpgradeCode”问题,如果您使用的是msbuild,可以在项目中执行以下操作:
<PropertyGroup>
<NewUpgradeCode>$([System.Guid]::NewGuid())</NewUpgradeCode>
</PropertyGroup>
<DefineConstants>NewUpgradeCode=$(NewUpgradeCode)</DefineConstants>
并在捆绑中:
<Bundle Name="!(bind.PackageName.Package)"
Version="!(bind.PackageVersion.Package)"
Manufacturer="!(bind.PackageManufacturer.Package)"
UpgradeCode="$(var.NewUpgradeCode)">
我实际上是在类似模板的包中使用它来打包一些一次性包,我不希望它们彼此关联。但是,我仍然希望他们有一个升级代码,以防我以后需要升级它们。
我不能说这是否是这个用例的最佳解决方案,但似乎有效。
答案 2 :(得分:1)
小心你想要达到的目标。您是否尝试安装同一软件的多个实例?或者你有这个程序的不同应用程序,可能需要安装在同一台机器上。
MSI并非旨在允许并排安装相同的软件。
正如@Glytzhokof所提到的,MSI中有三个独立的代码需要解决。
通常,您会生成一个永远不会随着MSI的使用寿命而变化的升级代码。如果您尝试安装两个具有相同升级代码的MSI版本,那么您将在MSI中触发升级逻辑(即升级现有安装或阻止回滚,除非您明确启用此操作)
您要实现的目标需要所有软件包的独特产品,包装和升级代码(允许并排安装软件的V1和V2)但是您需要非常小心选择并排。我见过版本1.2.x具有相同的升级代码,但1.3.x有一个新的升级代码允许并排安装。
听起来像是为了一些乐趣。