wix 生成新的升级代码

Gil*_*lad 2 wix wix3.5 wix3.6 wix3.7

我的项目需要能够同时安装 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>
Run Code Online (Sandbox Code Playgroud)

Dav*_*sen 5

只是为了回答“如何自动生成 UpgradeCode”问题,如果您使用的是 msbuild,您可以在项目中执行以下操作:

<PropertyGroup>
  <NewUpgradeCode>$([System.Guid]::NewGuid())</NewUpgradeCode>
</PropertyGroup>

<DefineConstants>NewUpgradeCode=$(NewUpgradeCode)</DefineConstants>
Run Code Online (Sandbox Code Playgroud)

并在捆绑包中:

<Bundle Name="!(bind.PackageName.Package)"
        Version="!(bind.PackageVersion.Package)"
        Manufacturer="!(bind.PackageManufacturer.Package)"
        UpgradeCode="$(var.NewUpgradeCode)">
Run Code Online (Sandbox Code Playgroud)

实际上,我在类似模板的捆绑包中使用它来打包一些一次性包,我不希望它们彼此关联。但是,我仍然希望他们有一个升级代码,以防我以后需要升级它们。

我不能说这是否是该用例的最佳解决方案,但似乎可行。