deployment - WIX - 修补后无法修补安装

标签 deployment wix wix3.5 setup-deployment

这里需要一点帮助...

错误:Windows Installer 服务无法安装升级补丁,因为可能缺少要升级的程序,或者升级补丁可能更新了不同版本的程序。确认要升级的程序存在于您的计算机上,并且您有正确的升级补丁。

我做了以下...

  1. 创建了 MSI 1.0 版(GUID 自动创建),ProductId="*"
  2. 针对 1.0.wixpdb 版本 1.1(已设置更新代码)创建了一个补丁 (MSP),ProductId="{GUID1}",pyro 发出了有关更改产品代码的警告。
  3. 针对 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更新的两条规则是:

  1. 永远不要从具有不同产品 ID 的 MSI 打补丁,他们会找不到产品并且不会运行

  2. 永远不要提供具有相同产品 ID 的不同 MSI,它们将失败并显示“安装了另一个版本”并且不会运行

如果不同的 MSI 只是用相同的产品 ID 覆盖前一个 MSI,那会简单得多,但必须有一个很好的理由......

关于deployment - WIX - 修补后无法修补安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819407/

相关文章:

c# - 在 .net5 中部署为单个文件,log4net 为配置文件抛出异常

java - 在 Mac OS X 扩展坞中锚定 Java 应用程序?

wix - 在 WiX 中指定条件先决条件

.net - 使用 Wix 编辑 Web.Config 连接字符串设置

java - tomcat 7并行部署目录问题

c# - 文件计数保存在哪里?

dialog - 如何使用 WIX 自定义对话框窗口图标?

wix - 从 MaintenaceTypeDialog 中删除 'Change' 按钮

wix - WiX 升级后出现发热错误

javascript - 在 Heroku 前端部署 Angular/Express 应用程序时出现问题无法访问 API 端点