我的项目需要能够同时安装 2 个或更多版本。 据我所知,我找到的解决方案是为安装程序的每个版本更改升级代码。
但是我想自动执行此操作。在常规 GUID 中,我只使用“*”,但这不适用于升级代码。 有没有办法在每个 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>
最佳答案
只是为了回答“如何自动生成 UpgradeCode”的问题,如果你使用的是 msbuild,你可以在你的项目中做这样的事情:
<PropertyGroup>
<NewUpgradeCode>$([System.Guid]::NewGuid())</NewUpgradeCode>
</PropertyGroup>
<DefineConstants>NewUpgradeCode=$(NewUpgradeCode)</DefineConstants>
在 bundle 中:
<Bundle Name="!(bind.PackageName.Package)"
Version="!(bind.PackageVersion.Package)"
Manufacturer="!(bind.PackageManufacturer.Package)"
UpgradeCode="$(var.NewUpgradeCode)">
我实际上在一个类似模板的包中使用它来打包一些一次性包,我不希望它们相互关联。但是,我仍然希望他们有升级代码,以备日后需要升级时使用。
我不能说这是否是该用例的最佳解决方案,但似乎可行。
关于wix 生成新的升级代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23529029/