Hello,

Well, I managed to overcome this myself. For those who interested in
details, please visit my blog:
http://ysdevlog.blogspot.com/2008/12/multiple-instance-installations-and
.html

I would appreciate any comments.

-- Yan

-----Original Message-----
From: Yan Sklyarenko [mailto:y...@sitecore.net] 
Sent: Wednesday, December 24, 2008 4:44 PM
To: General discussion for Windows Installer XML toolset.
Subject: [WiX-users] Multiple instance installations and patches

Hello WiX community,

 

I'm just stuck with this scenario and I'd appreciate any hint.

I have a product which supports multiple instance installations with the
help of instance transforms. In order to make the components data
isolated, it is installed to different folders (like best practice guide
suggests), and also I apply another transform to change component GUIDs
for each instance. Hence, in order to install instance 1 I use the
following command line:

   Msiexec /i MyPackage.msi MSINEWINSTANCE=1
TRANSFORMS=:InstanceId1;:ComponentGUIDTransform1.mst INSTALLLOCATION=...

And for instance 2:

   Msiexec /i MyPackage.msi MSINEWINSTANCE=1
TRANSFORMS=:InstanceId2;:ComponentGUIDTransform2.mst INSTALLLOCATION=...

Etc.

 

This works perfectly. 

Now I'd like to build a patch which then can be applied to any of the
instance. I use the "pure-WiX" way of building the .msp:

candle Patch.wxs

light Patch.wixobj -out Patch.wixmsp

torch -p -xi v100\MyPackage.wixpdb v101\ MyPackage.wixpdb -out
diff.wixmst

pyro Patch.wixmsp -out Patch.msp -t UpdatePatch diff.wixmst

 

The output patch.msp can successfully patch the default instance only.
Now, again following the guide, I'm going to populate the Targets
property of the patch SummaryInfo stream with the product codes of other
instances. Something like this:

 

      static void SetTargetProductGUIDs(string mspPath, List<string>
productCodes)

      {

         using (Database patchDatabase = new Database(mspPath,
DatabaseOpenMode.Transact))

         {

            StringBuilder targetsBuilder = new StringBuilder();

            foreach (string productCode in productCodes)

            {

               targetsBuilder.Append(targetsBuilder.Length == 0 ?
productCode : string.Format(";{0}", productCode));

            }

            patchDatabase.SummaryInfo.Template =
targetsBuilder.ToString();

            patchDatabase.Commit();

         }

      }

 

This really updates the patch file. I can see this in Orca: View - >
Summary Information - > Targets field contains all product codes.

 

BUT, when I try to apply this modified patch to other instances of my
application (not only default), I get the same error: 

"The upgrade patch cannot be installed by the Windows Installer service
because the program to be upgraded may be missing, or the upgrade patch
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 patch."

 

Does anyone know what can be wrong? Any hint... Please, help...

Thank you.

 

-- Yan

 

------------------------------------------------------------------------
------
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to