I'm trying to figure out the best way to patch our product using the new Wix patching method or using the PCP/PatchWiz method.
Right now I'm trying to accomplish everything using the new Pure Wix patch method. I'm using the patch samples from the Wix help file for testing. My goal right now is to create a baseline install 1.0.0, then create 1.0.1 full install along with a patch. Then create 1.0.2 along with a patch. I'm able to get the same 1.0.2 patch to apply to 1.0.0 and 1.0.0 that's been patched with 1.0.1 patch, but I can't get the same 1.0.2 patch to update 1.0.1 that was installed directly from the .msi. The reason is the patches are using the MinorUpdateTargetRTM flag so that I could get the 1.0.2 patch to apply to both 1.0.0 and 1.0.0 patched to 1.0.1. So 1.0.2 won't target a baseline of 1.0.1 this way. I remember in the PCP method you could target multiple baselines to accomplish this. So from reading the minimal patch documentation in Wix, I tried creating multiple Media entries in the patch.wxs file with different cabinet names. When I try to pass the wixmsp file to pyro, pyro crashes: Pyro.exe 1.0.2\patch.wixmsp -out 1.0.2\patch.msp -t RTM 1.0.2\1.0.0.wixmst -t _1.0.1 1.0.2\1.0.1.wixmst pyro.exe : error PYRO0001 : Item has already been added. Key in dictionary: 'SampleFile' Key being added: 'SampleFile' Exception Type: System.ArgumentException Stack Trace: at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) at System.Collections.Hashtable.Add(Object key, Object value) at Microsoft.Tools.WindowsInstallerXml.Binder.UpdateFileInformation(Output output, FileRowCollection fileRows, MediaRowCollection mediaRows, IDictionary`2 infoCache) at Microsoft.Tools.WindowsInstallerXml.Binder.BindDatabase(Output output, String databaseFile) at Microsoft.Tools.WindowsInstallerXml.Binder.Bind(Output output, String file) at Microsoft.Tools.WindowsInstallerXml.Tools.Pyro.Run(String[] args) Here is my patch.wxs file: <?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" MinorUpdateTargetRTM="yes" > <Media Id="5000" Cabinet="RTM.cab"> <PatchBaseline Id="RTM"/> </Media> <Media Id="6000" Cabinet="_1.0.1.cab"> <PatchBaseline Id="_1.0.1"/> </Media> <PatchFamilyRef Id="SamplePatchFamily"/> </Patch> <Fragment> <PatchFamily Id='SamplePatchFamily' Version='$(var.Version)' Supersede='yes'> <ComponentRef Id="SampleComponent"/> </PatchFamily> </Fragment> </Wix> Is this just unsupported at this time, or is there a better way to accomplish this? I've been using MSI since it was in beta of Windows 2000, and I always thought .msp's were really cool if you build them manually, but I could never find a good method of using them in a real world build scenario that doesn't require a ton of time to get every release just right. I know Microsoft releases .msp patches for hotfixes or service packs once in a while, but a lot of companies have regular full releases of products every month or two. Being able to release small patches for existing customers along with the full installs for new customers every month would be great, but the amount of effort to build .msp files for each release is too significant. So I think most companies just release full .msi's. Thanks, Mike Ballou ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users