这里需要一点帮助...
错误:Windows Installer 服务无法安装升级补丁,因为可能缺少要升级的程序,或者升级补丁可能更新了不同版本的程序。确认要升级的程序存在于您的计算机上,并且您有正确的升级补丁。
我做了以下...
- 创建了 MSI 1.0 版(GUID 自动创建),ProductId="*"
- 针对 1.0.wixpdb 版本 1.1(已设置更新代码)创建了一个补丁 (MSP),ProductId="{GUID1}",pyro 发出了有关更改产品代码的警告。
- 针对 1.1.wixpdb 版本 1.2 创建了另一个补丁 (MSP)(保持相同的更新代码)。 ProductId="{GUID1}", 无法安装。
场景... 安装 MSI v1.0 -> 安装 MSP 1.1 = 工作正常。
安装 MSI v1.0 -> 安装 MSP 1.1 -> 安装 MSP 1.2 = 失败,windows 找不到应用程序。
安装 MSI v1.1 -> 安装 MSP 1.2 = 工作正常。
对我来说,这意味着当第一个补丁 (1.1) 出现故障时,某些东西可能没有更新,或者在创建补丁 1.2 时我需要考虑 1.0 和 1.1。我尝试了各种选择,从使用到在 ...
有什么想法吗?
更新/补丁码...
产品.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="WiX Patch Example Product"
Language="1033"
Version="1.0.0"
Manufacturer="Dynamo Corporation"
UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD">
<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="File_1.txt" />
<ComponentRef Id="File_2.txt" />
<ComponentRef Id="File_3.txt" />
</Feature>
</Fragment>
<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="File_1.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1">
<File Id="File_1.txt" Name="File 1.txt" Source=".\$(var.Version)\File 1.txt" />
</Component>
<Component Id="File_2.txt" Guid="{b9b267a3-5648-4e32-9ab1-f3032980f6c2}" DiskId="1">
<File Id="File_2.txt" Name="File 2.txt" Source=".\$(var.Version)\File 2.txt" />
</Component>
<Component Id="File_3.txt" Guid="{1df728ae-333d-47c5-9558-c0923f958a8d}" DiskId="1">
<File Id="File_3.txt" Name="File 3.txt" Source=".\$(var.Version)\File 3.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>
产品 1.1.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD"
Name="WiX Patch Example Product"
Language="1033"
Version="1.1.0"
Manufacturer="Dynamo Corporation"
UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD">
<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="File_1.txt" />
<ComponentRef Id="File_2.txt" />
<ComponentRef Id="File_3.txt" />
<ComponentRef Id="File_4.txt" />
</Feature>
</Fragment>
<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="File_1.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1">
<File Id="File_1.txt" Name="File 1.txt" Source=".\$(var.Version)\File 1.txt" />
</Component>
<Component Id="File_2.txt" Guid="{b9b267a3-5648-4e32-9ab1-f3032980f6c2}" DiskId="1">
<File Id="File_2.txt" Name="File 2.txt" Source=".\$(var.Version)\File 2.txt" />
</Component>
<Component Id="File_3.txt" Guid="{1df728ae-333d-47c5-9558-c0923f958a8d}" DiskId="1">
<File Id="File_3.txt" Name="File 3.txt" Source=".\$(var.Version)\File 3.txt" />
</Component>
<Component Id="File_4.txt" Guid="{f728f62d-91f4-4c78-b2fe-65a9f0f6043c}" DiskId="1">
<File Id="File_4.txt" Name="File 4.txt" Source=".\$(var.Version)\File 4.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>
产品 1.2.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD"
Name="WiX Patch Example Product"
Language="1033"
Version="1.2.0"
Manufacturer="Dynamo Corporation"
UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD">
<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="File_1.txt" />
<ComponentRef Id="File_2.txt" />
<ComponentRef Id="File_3.txt" />
<ComponentRef Id="File_4.txt" />
</Feature>
</Fragment>
<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="File_1.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1">
<File Id="File_1.txt" Name="File 1.txt" Source=".\$(var.Version)\File 1.txt" />
</Component>
<Component Id="File_2.txt" Guid="{b9b267a3-5648-4e32-9ab1-f3032980f6c2}" DiskId="1">
<File Id="File_2.txt" Name="File 2.txt" Source=".\$(var.Version)\File 2.txt" />
</Component>
<Component Id="File_3.txt" Guid="{1df728ae-333d-47c5-9558-c0923f958a8d}" DiskId="1">
<File Id="File_3.txt" Name="File 3.txt" Source=".\$(var.Version)\File 3.txt" />
</Component>
<Component Id="File_4.txt" Guid="{f728f62d-91f4-4c78-b2fe-65a9f0f6043c}" DiskId="1">
<File Id="File_4.txt" Name="File 4.txt" Source=".\$(var.Version)\File 4.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>
补丁 1.1
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="yes"
Manufacturer="Dynamo 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='1.1.0' Supersede='no'>
</PatchFamily>
</Fragment>
</Wix>
补丁 1.2
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="yes"
Manufacturer="Dynamo 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='1.2.0' Supersede='no'>
</PatchFamily>
</Fragment>
</Wix>
最佳答案
使您的 ProductId 静态化将有助于打补丁方案,每个下一个补丁都会起作用。
但请记住,运行 .msi 例如1.3 版补丁(甚至 1.0 版 msi)之后的 1.5 版将失败并显示:“已安装该产品的另一个版本...”消息。因此,当您坚持使用相同的产品 ID 时,仅提供补丁(从 .msi 创建的 .msp),并且当您希望提供新的 .msi 时,请确保更改产品 ID。
我回答这个问题当然来不及了,但我只是在这个问题上浪费了一整天的时间,所以决定提出来,这样其他人就不必这样做了。
我猜MSI+MSP更新的两条规则是:
永远不要从具有不同产品 ID 的 MSI 打补丁,他们会找不到产品并且不会运行
永远不要提供具有相同产品 ID 的不同 MSI,它们将失败并显示“安装了另一个版本”并且不会运行
如果不同的 MSI 只是用相同的产品 ID 覆盖前一个 MSI,那会简单得多,但必须有一个很好的理由......
关于deployment - WIX - 修补后无法修补安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819407/