Wix InstanceTransform with AllowDowgrades
Wix InstanceTransform with AllowDowgrades
我有一个带有 wxs 文件的 wix 安装项目,
我配置了 MajorUpgrade AllowDowngrades="yes" 并定义了实例转换以允许多个实例。
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define WixDemoWPFApp_TargetDir=$(var.WixDemoWPFApp.TargetDir)?>
<Product Id="*" Name="WixSetupWPFApp" Language="1033" Version="2.0.0.0" Manufacturer="Licence Owner"
UpgradeCode="ae4af8f5-9287-408a-b7bd-d2fdb89a8da7">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="Downgrade not allowed" />
<MediaTemplate />
<Property Id="INSTANCEID" Value="0" />
<InstanceTransforms Property="INSTANCEID">
<Instance Id="I01" ProductCode="{888F3620-F2AB-4C0B-A276-0A5AE9C0B6CB}" ProductName="WixDemo 3.7.4 Dev" />
<Instance Id="I02" ProductCode="{01D23E62-A369-43E1-914A-FA017B1EE822}" ProductName="WixDemo 3.7.4 Test" />
<Instance Id="I03" ProductCode="{00D804D7-0AD0-412C-805A-4D37FF74FFA3}" ProductName="WixDemo 3.7.5" />
<Instance Id="I04" ProductCode="{6C3E5B4E-BF7D-4E7E-A62A-B7DFB750F581}" ProductName="WixDemo 3.7.6" />
</InstanceTransforms>
<Feature Id="ProductFeature" Title="WixSetupWPFApp" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<SetDirectory Id="WINDOWSVOLUME" Value="[WindowsVolume]" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WINDOWSVOLUME">
<Directory Id="WixDemo" Name="WixDemo">
<Directory Id="INSTALLLOCATION" Name="WixDemo" />
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLLOCATION">
<Component Id="WixDemoWPFApp.exe" Guid="42907ee1-2bb2-4416-8d8f-cebc2bf53f09">
<File Id="WixDemoWPFApp.exe" Name="WixDemoWPFApp.exe" Source="$(var.WixDemoWPFApp_TargetDir)WixDemoWPFApp.exe" />
</Component>
<Component Id="WixDemoWPFApp.exe.config" Guid="ed8a9503-2eb1-4f49-b7f3-f027f542c93f">
<File Id="WixDemoWPFApp.exe.config" Name="WixDemoWPFApp.exe.config"
Source="$(var.WixDemoWPFApp_TargetDir)WixDemoWPFApp.exe.config" />
</Component>
<Component Id="WixDemoWPFApp.pdb" Guid="5bf6cd62-7bc7-42cd-839a-7b66d7e8a09a">
<File Id="WixDemoWPFApp.pdb" Name="WixDemoWPFApp.pdb" Source="$(var.WixDemoWPFApp_TargetDir)WixDemoWPFApp.pdb" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
现在,当我尝试安装 MSI 的多个实例时,即使 ProductName、ProductCode 和 InstanceId 不同,前一个实例也会被卸载。
发生重大升级是因为升级代码在旧产品和新产品中是相同的,实际上它要求产品代码不同。如果您需要为每个不同的实例(和 ProductCode)进行特定升级,请将新的唯一 UpgradeCode 添加到您的 Instance 元素。
我有一个带有 wxs 文件的 wix 安装项目,
我配置了 MajorUpgrade AllowDowngrades="yes" 并定义了实例转换以允许多个实例。
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define WixDemoWPFApp_TargetDir=$(var.WixDemoWPFApp.TargetDir)?>
<Product Id="*" Name="WixSetupWPFApp" Language="1033" Version="2.0.0.0" Manufacturer="Licence Owner"
UpgradeCode="ae4af8f5-9287-408a-b7bd-d2fdb89a8da7">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="Downgrade not allowed" />
<MediaTemplate />
<Property Id="INSTANCEID" Value="0" />
<InstanceTransforms Property="INSTANCEID">
<Instance Id="I01" ProductCode="{888F3620-F2AB-4C0B-A276-0A5AE9C0B6CB}" ProductName="WixDemo 3.7.4 Dev" />
<Instance Id="I02" ProductCode="{01D23E62-A369-43E1-914A-FA017B1EE822}" ProductName="WixDemo 3.7.4 Test" />
<Instance Id="I03" ProductCode="{00D804D7-0AD0-412C-805A-4D37FF74FFA3}" ProductName="WixDemo 3.7.5" />
<Instance Id="I04" ProductCode="{6C3E5B4E-BF7D-4E7E-A62A-B7DFB750F581}" ProductName="WixDemo 3.7.6" />
</InstanceTransforms>
<Feature Id="ProductFeature" Title="WixSetupWPFApp" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<SetDirectory Id="WINDOWSVOLUME" Value="[WindowsVolume]" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WINDOWSVOLUME">
<Directory Id="WixDemo" Name="WixDemo">
<Directory Id="INSTALLLOCATION" Name="WixDemo" />
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLLOCATION">
<Component Id="WixDemoWPFApp.exe" Guid="42907ee1-2bb2-4416-8d8f-cebc2bf53f09">
<File Id="WixDemoWPFApp.exe" Name="WixDemoWPFApp.exe" Source="$(var.WixDemoWPFApp_TargetDir)WixDemoWPFApp.exe" />
</Component>
<Component Id="WixDemoWPFApp.exe.config" Guid="ed8a9503-2eb1-4f49-b7f3-f027f542c93f">
<File Id="WixDemoWPFApp.exe.config" Name="WixDemoWPFApp.exe.config"
Source="$(var.WixDemoWPFApp_TargetDir)WixDemoWPFApp.exe.config" />
</Component>
<Component Id="WixDemoWPFApp.pdb" Guid="5bf6cd62-7bc7-42cd-839a-7b66d7e8a09a">
<File Id="WixDemoWPFApp.pdb" Name="WixDemoWPFApp.pdb" Source="$(var.WixDemoWPFApp_TargetDir)WixDemoWPFApp.pdb" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
现在,当我尝试安装 MSI 的多个实例时,即使 ProductName、ProductCode 和 InstanceId 不同,前一个实例也会被卸载。
发生重大升级是因为升级代码在旧产品和新产品中是相同的,实际上它要求产品代码不同。如果您需要为每个不同的实例(和 ProductCode)进行特定升级,请将新的唯一 UpgradeCode 添加到您的 Instance 元素。