Patching Pain

2 messages Options
Embed this post
Permalink
John Robbins

Patching Pain

Reply Threaded More More options
Print post
Permalink
Hello,

Using WiX 2.0, I'm trying to set up a patching scheme where if the user
has installed a 1.00 version of the product they can apply patches they
come out for that version. However, I'm missing something big because I
can only get a single patch to work and no subsequent patches as they
fail with error 1642.

Scenario:
        - The user has installed 1.00.
        - A 1.01 patch is released and they apply it.
        - A 1.02 patch that contains the 1.01 fixes is released and the
user can apply it.
        - A 1.03 patch that contains both 1.01 and 1.02 fixes is
released, they *skip* that patch.
        - A 1.04 patch that sums up 1.01-1.03 fixes is released, and
when applied, gets them all fixes up through 1.04.

        In other words, I want the patches to be cumulative so whenever
the client feels like upgrading as patches are released, the install
accounts for whatever patch level version they have on the machine and
brings them to the latest and greatest. If I create separate patches for
each version, they can all be properly applied in order, but I want a
single patch file that will

Here's what I've done:
        1. Created the 1.00, 1.01, and 1.02 full installs with the same
GUIDs for product codes and upgrade codes. The full installs properly
upgrade the existing older installations.
        2. Using the steps from the tutorial
(http://www.tramontana.co.hu/wix/lesson4.php), I've created two .WXS
files, Patch1.0-1.01.wxs and Patch1.0-1.02.wxs.
        3. Key parts of Patch1.0-1.01.wxs:

  <PatchCreation Id='F3F065D3-45CE-4B24-8759-925608FCE97F'
                 AllowMajorVersionMismatches='no'
                 AllowProductCodeMismatches='no'
                 CleanWorkingFolder='no'
                 WholeFilesOnly='no'>
        ...
      <UpgradeImage Id='Patch_fixed'
                    src='.\ADMIN1.01\Version1.01.msi'>
        <TargetImage Id='Patch_error'
                     Order='1'
                     IgnoreMissingFiles='no'
                     SourceFile='.\ADMIN1.0\Version1.00.msi' />
      </UpgradeImage>
    </Family>
    <TargetProductCode Id='549A9B54-40DD-46DC-A960-5F76BB921BFF' />
        ...

        4. Doing the tutorial steps, I created the .MSP and it properly
updates from 1.00 to 1.01.
        5. Key parts of Patch1.0-1.02.wxs (notice that I'm building the
patch from 1.00 sources and the 1.02 sources):

  <PatchCreation Id='A5B7EB6F-427A-485C-A9AE-D5B033CF05B3'
                 AllowMajorVersionMismatches='no'
                 AllowProductCodeMismatches='no'
                 CleanWorkingFolder='no'
                 WholeFilesOnly='no'>
        ...
      <UpgradeImage Id='Patch_fixed'
                    src='.\ADMIN1.02\Version1.02.msi'>
        <TargetImage Id='Patch_error'
                     Order='1'
                     IgnoreMissingFiles='no'
                     SourceFile='.\ADMIN1.0\Version1.00.msi'/>
      </UpgradeImage>
    </Family>

    <TargetProductCode Id='549A9B54-40DD-46DC-A960-5F76BB921BFF' />
    <ReplacePatch Id ='F3F065D3-45CE-4B24-8759-925608FCE97F'/>
        ...
       
        6. When applying the 1.02 patch to the updated 1.01 the log
reports:
MSI (c) (F4:F4) [17:24:39:546]: Final Patch Application Order:
MSI (c) (F4:F4) [17:24:39:546]: {F3F065D3-45CE-4B24-8759-925608FCE97F} -

MSI (c) (F4:F4) [17:24:39:546]: Other Patches:
MSI (c) (F4:F4) [17:24:39:546]: Unknown\Absent:
{A5B7EB6F-427A-485C-A9AE-D5B033CF05B3} -
C:\Junk\Cruft\patching\Test\Patch1.0-1.02.msp
The upgrade cannot be installed by the Windows Installer service because
the program to be upgraded may be missing, or the upgrade may update a
different version of the program. Verify that the program to be upgraded
exists on your computer and that you have the correct upgrade.
C:\Windows\Installer\bea84f0.msi
MSI (c) (F4:F4) [17:24:39:547]: Product: Foobar 1.0 - Update
'{A5B7EB6F-427A-485C-A9AE-D5B033CF05B3}' could not be installed. Error
code 1642. Additional information is available in the log file
C:\Junk\Cruft\patching\Test\log.log.
MSI (c) (F4:F4) [17:24:39:548]: Windows Installer installed an update.
Product Name: Foobar 1.0. Product Version: 1.0.0. Product Language:
1033. Update Name: {A5B7EB6F-427A-485C-A9AE-D5B033CF05B3}. Installation
success or error status: 1642.
MSI (c) (F4:F4) [17:24:39:548]: Product: Foobar 1.0 -- Installation
failed.
MSI (c) (F4:F4) [17:24:39:549]: Windows Installer installed the product.
Product Name: Foobar 1.0. Product Version: 1.0.0. Product Language:
1033. Installation success or error status: 1642.

Any help greatly appreciated.

John
Wintellect
http://www.wintellect.com
877-968-5528


-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
WiX-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/wix-users
John Robbins

Re: Patching Pain

Reply Threaded More More options
Print post
Permalink
I finally found the barely documented MinorUpdateTargetRTM='1' attribute
you can add to the PatchMetadata element to make my 1.00 to 1.02
scenario work.


John
Wintellect
http://www.wintellect.com
877-968-5528


>-----Original Message-----
>From: [hidden email] [mailto:wix-users-
>[hidden email]] On Behalf Of John Robbins
>Sent: Sunday, December 09, 2007 6:35 PM
>To: [hidden email]
>Subject: [WiX-users] Patching Pain
>
>Hello,
>
>Using WiX 2.0, I'm trying to set up a patching scheme where if the user
>has installed a 1.00 version of the product they can apply patches they
>come out for that version. However, I'm missing something big because I
>can only get a single patch to work and no subsequent patches as they
>fail with error 1642.
>
>Scenario:
> - The user has installed 1.00.
> - A 1.01 patch is released and they apply it.
> - A 1.02 patch that contains the 1.01 fixes is released and the
>user can apply it.
> - A 1.03 patch that contains both 1.01 and 1.02 fixes is
>released, they *skip* that patch.
> - A 1.04 patch that sums up 1.01-1.03 fixes is released, and
>when applied, gets them all fixes up through 1.04.
>
> In other words, I want the patches to be cumulative so whenever
>the client feels like upgrading as patches are released, the install
>accounts for whatever patch level version they have on the machine and
>brings them to the latest and greatest. If I create separate patches
for

>each version, they can all be properly applied in order, but I want a
>single patch file that will
>
>Here's what I've done:
> 1. Created the 1.00, 1.01, and 1.02 full installs with the same
>GUIDs for product codes and upgrade codes. The full installs properly
>upgrade the existing older installations.
> 2. Using the steps from the tutorial
>(http://www.tramontana.co.hu/wix/lesson4.php), I've created two .WXS
>files, Patch1.0-1.01.wxs and Patch1.0-1.02.wxs.
> 3. Key parts of Patch1.0-1.01.wxs:
>
>  <PatchCreation Id='F3F065D3-45CE-4B24-8759-925608FCE97F'
>                 AllowMajorVersionMismatches='no'
>                 AllowProductCodeMismatches='no'
>                 CleanWorkingFolder='no'
>                 WholeFilesOnly='no'>
> ...
>      <UpgradeImage Id='Patch_fixed'
>                    src='.\ADMIN1.01\Version1.01.msi'>
>        <TargetImage Id='Patch_error'
>                     Order='1'
>                     IgnoreMissingFiles='no'
>                     SourceFile='.\ADMIN1.0\Version1.00.msi' />
>      </UpgradeImage>
>    </Family>
>    <TargetProductCode Id='549A9B54-40DD-46DC-A960-5F76BB921BFF' />
> ...
>
> 4. Doing the tutorial steps, I created the .MSP and it properly
>updates from 1.00 to 1.01.
> 5. Key parts of Patch1.0-1.02.wxs (notice that I'm building the
>patch from 1.00 sources and the 1.02 sources):
>
>  <PatchCreation Id='A5B7EB6F-427A-485C-A9AE-D5B033CF05B3'
>                 AllowMajorVersionMismatches='no'
>                 AllowProductCodeMismatches='no'
>                 CleanWorkingFolder='no'
>                 WholeFilesOnly='no'>
> ...
>      <UpgradeImage Id='Patch_fixed'
>                    src='.\ADMIN1.02\Version1.02.msi'>
>        <TargetImage Id='Patch_error'
>                     Order='1'
>                     IgnoreMissingFiles='no'
>                     SourceFile='.\ADMIN1.0\Version1.00.msi'/>
>      </UpgradeImage>
>    </Family>
>
>    <TargetProductCode Id='549A9B54-40DD-46DC-A960-5F76BB921BFF' />
>    <ReplacePatch Id ='F3F065D3-45CE-4B24-8759-925608FCE97F'/>
> ...
>
> 6. When applying the 1.02 patch to the updated 1.01 the log
>reports:
>MSI (c) (F4:F4) [17:24:39:546]: Final Patch Application Order:
>MSI (c) (F4:F4) [17:24:39:546]: {F3F065D3-45CE-4B24-8759-925608FCE97F}
-
>
>MSI (c) (F4:F4) [17:24:39:546]: Other Patches:
>MSI (c) (F4:F4) [17:24:39:546]: Unknown\Absent:
>{A5B7EB6F-427A-485C-A9AE-D5B033CF05B3} -
>C:\Junk\Cruft\patching\Test\Patch1.0-1.02.msp
>The upgrade cannot be installed by the Windows Installer service
because
>the program to be upgraded may be missing, or the upgrade may update a
>different version of the program. Verify that the program to be
upgraded

>exists on your computer and that you have the correct upgrade.
>C:\Windows\Installer\bea84f0.msi
>MSI (c) (F4:F4) [17:24:39:547]: Product: Foobar 1.0 - Update
>'{A5B7EB6F-427A-485C-A9AE-D5B033CF05B3}' could not be installed. Error
>code 1642. Additional information is available in the log file
>C:\Junk\Cruft\patching\Test\log.log.
>MSI (c) (F4:F4) [17:24:39:548]: Windows Installer installed an update.
>Product Name: Foobar 1.0. Product Version: 1.0.0. Product Language:
>1033. Update Name: {A5B7EB6F-427A-485C-A9AE-D5B033CF05B3}. Installation
>success or error status: 1642.
>MSI (c) (F4:F4) [17:24:39:548]: Product: Foobar 1.0 -- Installation
>failed.
>MSI (c) (F4:F4) [17:24:39:549]: Windows Installer installed the
product.

>Product Name: Foobar 1.0. Product Version: 1.0.0. Product Language:
>1033. Installation success or error status: 1642.
>
>Any help greatly appreciated.
>
>John
>Wintellect
>http://www.wintellect.com
>877-968-5528
>
>
>-----------------------------------------------------------------------
-

>-
>SF.Net email is sponsored by:
>Check out the new SourceForge.net Marketplace.
>It's the best place to buy or sell services for
>just about anything Open Source.
>http://sourceforge.net/services/buy/index.php
>_______________________________________________
>WiX-users mailing list
>[hidden email]
>https://lists.sourceforge.net/lists/listinfo/wix-users

-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
WiX-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/wix-users