【发布时间】:2016-06-06 13:13:52
【问题描述】:
前提
我正在使用 WiX 工具集 3.5。
我已经成功地为我的产品发布了几个使用相同 UpgradeCode 和 ProductCode 的补丁。但是,最近的两个补丁错误地使用了不同的 UpgradeCode。这些补丁安装成功,但我最新的补丁拒绝安装。
这是我自上次 MSI 发布以来的发布历史:
- 带有升级代码 A 的安装程序 (10.0.20935.0)。
- 带有 UpgradeCode A 的补丁 (10.0.21069.0)。
- 带有升级代码 A 的补丁 (10.0.21188.0)。
- 带有升级代码 A 的补丁 (10.0.21334.0)。
- 带有 UpgradeCode A 的补丁 (10.0.21671.0)。
- 带有 UpgradeCode B 的补丁 (10.1.0.264)。
- 带有 UpgradeCode C 的补丁 (10.1.0.21682)。
- Patch (10.2.0.0) 是最新的补丁,无论我使用的是 UpgradeCode A、B 还是 C,都会失败。
以下是我尝试安装补丁 10.2.0.0 时出现的错误信息:
Windows Installer 服务无法安装升级补丁,因为可能缺少要升级的程序,或者升级补丁可能会更新程序的不同版本。验证您的计算机上是否存在要升级的程序,并且您拥有正确的升级补丁。
不允许用户安装补丁。
问题
我需要发布一个补丁
- 在生产环境 (10.1.0.21682) 上成功安装。
- 允许我在未来继续发布补丁。
我如何做到这一点?
我尝试了什么?
我尝试了以下方法,但没有成功:
- 将 UpgradeCode 更改为 A,即 10.0.21671.0 和更早版本的版本。
- 将 UpgradeCode 更改为 B,即来自 10.1.0.264 的那个。
- 将 UpgradeCode 更改为 C,即来自 10.1.0.21682 的那个。
- 更改产品代码。
- 直接从 10.0.21671.0 到 10.2.0.0 创建补丁(当然在生产中它将在 10.1.0.21682 上运行)。
以上所有情况都会导致相同的错误消息(在前提中给出)。我还在 StackOverflow 上找到了以下问题:
这导致我将OnlyDetect="no" 添加到我产品的.wxs 文件中新<Upgrade> 元素的<UpgradeVersion> 元素中:
<Upgrade Id="UpgradeCode C">
<UpgradeVersion Property="OLD_PRODUCT_FOUND"
IncludeMaximum="yes"
Maximum="10.2.0.0"
MigrateFeatures="yes"
OnlyDetect="no" />
</Upgrade>
但是,这与之前的结果完全相同。
示例代码
我创建了一个小项目,用于复制我的场景。
以下是我的测试项目中产品版本 10.2.0.0 的 .wxs 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="{8CB0CC73-82B1-495E-B768-D1C38372678A}"
Name="Sample Application"
Language="1033"
Version="10.2.0.0"
Manufacturer="Sample Corporation"
UpgradeCode="{7E72848F-FC99-4737-87DE-91C738B7C5EE}">
<Package Description="Installs a file that will be patched."
Comments="This Product does not install any executables"
InstallerVersion="200"
Compressed="yes" />
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<FeatureRef Id="SampleProductFeature"/>
</Product>
<Fragment>
<Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1">
<ComponentRef Id="Sample.txt" />
</Feature>
</Fragment>
<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="Sample.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1">
<File Id="Sample.txt" Name="Sample.txt" Source=".\$(var.Version)\Sample.txt" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="SampleProductFolder" Name="Patch Sample Directory">
</Directory>
</Directory>
</Directory>
</Fragment>
</Wix>
以下是 10.2.0.0 版补丁的 .wxs 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="no"
Manufacturer="Sample Corp"
MoreInfoURL="http://www.dynamocorp.com/"
DisplayName="Sample Patch"
Description="Small Update Patch"
Classification="Update"
OptimizedInstallMode="yes">
<Media Id="8000" Cabinet="RTM.cab" CompressionLevel="none">
<PatchBaseline Id="RTM">
</PatchBaseline>
</Media>
<PatchFamilyRef Id="SamplePatchFamily"/>
</Patch>
<Fragment>
<PatchFamily Id='SamplePatchFamily' Version='10.2.0.0' Supersede='no'>
</PatchFamily>
</Fragment>
</Wix>
【问题讨论】:
标签: wix windows-installer upgrade patch