cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
TarakIS
Level 2

Install Lower Version File with minor upgrade / Patch

Hello,

I have A.EXE in my Basic MSI Project which I need to update every time I prepare Minor Upgrade irrespective of file version.

Let me explain steps I performed:

1. Created Basic MSI Project: A.Exe version 1.0.0
2. Created Full Setup (setup.exe) with A.Exe
3. Make the Uncompressed version of above setup

4. Added Minor Upgrade to Media -> Upgrades Section with "Setup To Upgrade" = path of .msi extracted in step 3 above.
5. A.EXE file is replaced with version 1.0.1
6. Prepare Patch from Media -> Patch Design section. Settings done in Patch are:
- Create update.exe = true
- patch creation cache = Enable = false
- optimize patch for large files = true
- Allow patch to be uninstalled = false
- use default patch sequencing = true
- MSI Command line arguments (advance tab) = REINSTALLMODE=vdmus REINSTALL=ALL /lv d:\other\test.log
- Minor upgrade to Target RTM = Yes
- For Previous Setups Settings: previous Setup path = path of .msi extracted in step 3 above.

7. Now Prepared the Patch (update_1.exe)

8. Again change the version of A.Exe to 1.0.2 and prepare the patch (update_2.exe).

Now I install setups on windows server 2008: Steps in which I installed setups are below:

1. Installed Full Setup.exe - A.Exe version installed is 1.0.0
2. Installed Patch update_1.exe - A.Exe version installed is 1.0.1
3. Installed patch update_2.exe - A.Exe version installed is 1.0.2
4. Again installed update_1.exe - A.Exe version remain as 1.0.2

Step 4 is where i have problem, when update_1.exe is installed again I want A.exe with version 1.0.1

Log generated shows:

MSI (s) (F0:A0) [03:08:46:376]: Executing op: FileCopy(SourceName=compactutility.exe,SourceCabKey=compactutility.exe,DestName=CompactUtility.exe,Attributes=8192,FileSize=7168,PerTick=32768,,VerifyMedia=0,,TotalPatches=1,,,CheckCRC=0,Version=1.0.2.0,Language=0,InstallMode=126877696,,,,,,,)
MSI (s) (F0:A0) [03:08:46:376]: File: C:\Program Files (x86)\3D Cellular\Nokia Digit Translation Tool (Admin)\Bin\CompactUtility.exe; Won't Overwrite; Smart patch; Existing file is of an equal version

Can anyone please help? I am stuck at this point. I also tried "Always overwrite" option on File but NO luck.

Log generated when I installed update_1.exe again 2nd time is attached for reference.

Regards,
Tarak
Labels (1)
0 Kudos
(2) Replies
TarakIS
Level 2

Log file attached.
0 Kudos
joshstechnij
Level 10 Flexeran
Level 10 Flexeran

Without having access to the patches to determine which patch has which patch GUID from the log, this is likely the issue:

MSI (c) (28:B8) [03:08:26:548]: PATCH SEQUENCER: minor upgrade patch {93F374A4-CAA3-451D-8ACC-3FEDEAF1AF88} is applicable.
MSI (c) (28:B8) [03:08:26:548]: SequencePatches returns success.
MSI (c) (28:B8) [03:08:26:548]: Final Patch Application Order:
MSI (c) (28:B8) [03:08:26:548]: {93F374A4-CAA3-451D-8ACC-3FEDEAF1AF88} -
MSI (c) (28:B8) [03:08:26:548]: Other Patches:
MSI (c) (28:B8) [03:08:26:548]: Superseded: {97D9EB6D-2A8E-4666-AA5A-2B7DF8BB1D4B} - C:\Users\ADMINI~1\AppData\Local\Temp\2\{86FC205E-2607-4579-AAF3-988DCA8F800E}\ServicePack.msp


It is highly likely that {93F374A4-CAA3-451D-8ACC-3FEDEAF1AF88} is the latest patch (1.0.2) and {97D9EB6D-2A8E-4666-AA5A-2B7DF8BB1D4B} is 1.0.1 which is superceded as the log indicates. Because these are minor upgrade patches, the patch with the highest version is going to win when being applied, regardless of which patch was actually launched. All the patches and their information is stored by Windows Installer to ensure that patches are always sequenced in the correct order.

If patch 1.0.2 installs compactutility.exe version 1.0.2.0, this is further confirmed that this is the patch that has been applied by the FileCopy operation in the log, which references file version 1.0.2.0 which is taken directly from the File table of the running installation.

Unfortunately, this scenario is unlikely to work with Windows Installer installations and patches as they are designed to always apply the latest patch regardless of the patch someone may be trying to install. This is done to ensure a consistent and up-to-date product is installed on target machines (latest minor upgrade, then in order application of small update patches based on ascending patch sequence number, if any).

If possible, you may look into making patch 1.0.2 uninstallable so that it can be removed (assuming no unsupported changes were made in this patch that would render it ineligible for patch uninstall).

Alternately, it is possible to use InstallScript projects that do not provide maintenance operations to function as "patches" to MSI installations. This solution may not be feasible if these existing patches were already shipped.
0 Kudos