Re: [WiX-users] Multiple instance installations and patches

2009-04-09 Thread Heath Stewart
/p and some APIs care about the target ProductCodes and will actually
modified the resulting PATCH property if a ProductCode is not targetted. You
should use the TargetProductCodes element in that case. I have a blog post
coming about that (hopefully) soon at http://blogs.msdn.com.

On Wed, Apr 8, 2009 at 12:47 AM, Yan Sklyarenko y...@sitecore.net wrote:

 Thanks a lot for the hint, Heath!
 That's fantastic I can achieve the same without shaman dancing
 dismembering msp file!
 WiX rules!! :)

 One small question: is there any reason why this command format works:
   msiexec /i {42A33A91-36B0-4700-A6F5-1289D22F358C}
 PATCH=*path\to\patch.msp*

 but this doesn't (throwing that The upgrade patch cannot be installed
 ... error):
   msiexec /p *path\to\patch.msp* /n
 {42A33A91-36B0-4700-A6F5-1289D22F358C}

 ?
 This is reproduced without TargetProductCode elements.

 -- Yan

 -Original Message-
 From: Heath Stewart [mailto:clubs...@gmail.com]
 Sent: Friday, April 03, 2009 9:46 AM
 To: General discussion for Windows Installer XML toolset.
  Subject: Re: [WiX-users] Multiple instance installations and patches

 Actually, WiX supports this already without having to execute code.
 Under
 your PatchBaseline element add the Validation element and set
 ProductCode=no. The double-click scenario for the resulting MSP will
 only apply to the default instance (the instance you created the patch
 from)
 but it will apply explicitly to any instance even if the ProductCode is
 the
 same (assuming your instance transforms aren't changing the
 ProductVersion,
 ProductLanguage, or UpgradeCode). So they'd apply like so:

 msiexec /i {42A33A91-36B0-4700-A6F5-1289D22F358C}
 PATCH=*path\to\patch.msp*

 If you want to enable the double-click scenario while only building the
 patch against the default instance (which makes sense - it's all the
 same
 differences and files) use the new TargetProductCodes element added to
 WiX
 3.0.5106.0. Under your Patch element, add;

 TargetProductCodes
  TargetProductCode Id={42A33A91-36B0-4700-A6F5-1289D22F358C}/
  TargetProductCode Id={68C62C01-D064-4CF0-9239-F5D2FF36BD9A}/
 /TargetProductCodes

 Now when the MSP is double-clicked it will apply to any and all
 instances
 installed.


 On Tue, Dec 30, 2008 at 4:48 AM, Yan Sklyarenko y...@sitecore.net wrote:

  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
 
 .htmlhttp://ysdevlog.blogspot.com/2008/12/multiple-instance-installatio
 ns-and%0A.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, Liststring
  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

Re: [WiX-users] Multiple instance installations and patches

2009-04-08 Thread Yan Sklyarenko
Thanks a lot for the hint, Heath!
That's fantastic I can achieve the same without shaman dancing
dismembering msp file! 
WiX rules!! :)

One small question: is there any reason why this command format works:
   msiexec /i {42A33A91-36B0-4700-A6F5-1289D22F358C}
PATCH=*path\to\patch.msp*

but this doesn't (throwing that The upgrade patch cannot be installed
... error):
   msiexec /p *path\to\patch.msp* /n
{42A33A91-36B0-4700-A6F5-1289D22F358C} 

?
This is reproduced without TargetProductCode elements. 

-- Yan

-Original Message-
From: Heath Stewart [mailto:clubs...@gmail.com] 
Sent: Friday, April 03, 2009 9:46 AM
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] Multiple instance installations and patches

Actually, WiX supports this already without having to execute code.
Under
your PatchBaseline element add the Validation element and set
ProductCode=no. The double-click scenario for the resulting MSP will
only apply to the default instance (the instance you created the patch
from)
but it will apply explicitly to any instance even if the ProductCode is
the
same (assuming your instance transforms aren't changing the
ProductVersion,
ProductLanguage, or UpgradeCode). So they'd apply like so:

msiexec /i {42A33A91-36B0-4700-A6F5-1289D22F358C}
PATCH=*path\to\patch.msp*

If you want to enable the double-click scenario while only building the
patch against the default instance (which makes sense - it's all the
same
differences and files) use the new TargetProductCodes element added to
WiX
3.0.5106.0. Under your Patch element, add;

TargetProductCodes
  TargetProductCode Id={42A33A91-36B0-4700-A6F5-1289D22F358C}/
  TargetProductCode Id={68C62C01-D064-4CF0-9239-F5D2FF36BD9A}/
/TargetProductCodes

Now when the MSP is double-clicked it will apply to any and all
instances
installed.


On Tue, Dec 30, 2008 at 4:48 AM, Yan Sklyarenko y...@sitecore.net wrote:

 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

.htmlhttp://ysdevlog.blogspot.com/2008/12/multiple-instance-installatio
ns-and%0A.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, Liststring
 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

Re: [WiX-users] Multiple instance installations and patches

2009-04-03 Thread Heath Stewart
Actually, WiX supports this already without having to execute code. Under
your PatchBaseline element add the Validation element and set
ProductCode=no. The double-click scenario for the resulting MSP will
only apply to the default instance (the instance you created the patch from)
but it will apply explicitly to any instance even if the ProductCode is the
same (assuming your instance transforms aren't changing the ProductVersion,
ProductLanguage, or UpgradeCode). So they'd apply like so:

msiexec /i {42A33A91-36B0-4700-A6F5-1289D22F358C} PATCH=*path\to\patch.msp*

If you want to enable the double-click scenario while only building the
patch against the default instance (which makes sense - it's all the same
differences and files) use the new TargetProductCodes element added to WiX
3.0.5106.0. Under your Patch element, add;

TargetProductCodes
  TargetProductCode Id={42A33A91-36B0-4700-A6F5-1289D22F358C}/
  TargetProductCode Id={68C62C01-D064-4CF0-9239-F5D2FF36BD9A}/
/TargetProductCodes

Now when the MSP is double-clicked it will apply to any and all instances
installed.


On Tue, Dec 30, 2008 at 4:48 AM, Yan Sklyarenko y...@sitecore.net wrote:

 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
 .htmlhttp://ysdevlog.blogspot.com/2008/12/multiple-instance-installations-and%0A.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, Liststring
 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




-- 
Heath Stewart
Deployment Technologies Team, Microsoft
http://blogs.msdn.com/heaths
--

Re: [WiX-users] Multiple instance installations and patches

2008-12-30 Thread Yan Sklyarenko
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, Liststring
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