Well, below is a really stupid example, but illustrates the behavior (refer to WiX code snippets below).
Both installations install a single file and a single registry key. The file components have the same Component GUID, but are installed to a different file system location. The registry components have the same Component GUID, but are installed to a different registry location. When installing WixProject1, Foo.exe is installed to its location (PF\WixProject1\...), the registry key is written: HKLM\Software\WixProject1\InstallDir = 'PF\WixProject1\Foo.exe' When installing WixProject2, Foo.exe is installed to its location (PF\WixProject2\...), the registry key is written: HKLM\Software\WixProject2\InstallDir = 'PF\WixProject2\Foo.exe' ; Now uninstall one of them; say, WixProject1. The file is removed from the file system (PF\WixProject1\Foo.exe) and the WixProject1 directory is removed. The registry key for WixProject1, remains. ; Now uninstall the other product; for me, say, WixProject2. The file is removed from the file system (PF\WixProject2\Foo.exe) and the WixProject2 directory is removed. The registry key for WixProject2 (HKLM\Software\WixProject2\InstallDir) is also removed. ; Now, both products are uninstalled. Both products have their files removed, however, only the last product to be uninstalled has its non-file data removed (the registry key). In this example, HKLM\Software\WixProject1\InstallDir remains. ==> Now, let's get even more stupid and attempt to resolve the obvious ICE error we get... [Warning 1 ICE69: Mismatched component reference. Entry 'Foo.reg' of the Registry table belongs to component 'Foo.reg'. However, the formatted string in column 'Value' references file 'Foo.exe' which belongs to component 'Foo.exe'. Components are in the same feature. C:\TestInstall\WixProject1\WixProject1\Product.wxs 16 1 WixProject1] ... by putting the registry item under the file component like so: ============BEGIN WixProject1.wxs============== <Component Id="Foo.exe" Guid="8337196e-ed72-4957-8581-b2d56835399e"> <File Id="Foo.exe" Name="Foo.exe" Source="C:\Foo.exe" KeyPath="yes"/> <RegistryValue Id="Foo.reg" Action="write" Key="Software\WixProject1" Root="HKLM" Name="InstallDir" Value="[#Foo.exe]" Type="string"/> </Component> ============END============== ============BEGIN WixProject2.wxs============== <Component Id="Foo.exe" Guid="8337196e-ed72-4957-8581-b2d56835399e"> <File Id="Foo.exe" Name="Foo.exe" Source="C:\Foo.exe" KeyPath="yes"/> <RegistryValue Id="Foo.reg" Action="write" Key="Software\WixProject2" Root="HKLM" Name="InstallDir" Value="[#Foo.exe]" Type="string"/> </Component> ============END============== ... then run the same install / uninstall scenario. Again, both files and registry keys are installed. When uninstalling WixProject1, even though the key path to the component was indeed a file and the file did get removed, its registry key remains. When uninstalling WixProject2, then, its file and its registry key are removed. WixProject1's registry key, however, still remains. How does this fit into the ref counting picture? WixProject1: Product.wxs ===========[BEGIN]====================================================== <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="8337196e-ed72-4957-8581-b2d56835399d" Name="WixProject1" Language="1033" Version="1.0.0.0" Manufacturer="WixProject1" UpgradeCode="01e4f72e-6342-476b-8e2b-78bd158ff00d"> <Package InstallerVersion="200" Compressed="yes" /> <Media Id="1" Cabinet="WixProject1.cab" EmbedCab="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLLOCATION" Name="WixProject1"> <Component Id="Foo.exe" Guid="8337196e-ed72-4957-8581-b2d56835399e"> <File Id="Foo.exe" Name="Foo.exe" Source="C:\Foo.exe" KeyPath="yes"/> </Component> <Component Id="Foo.reg" Guid="8337196e-ed72-4957-8581-b2d56835399f"> <RegistryValue Id="Foo.reg" Action="write" Key="Software\WixProject1" KeyPath="yes" Root="HKLM" Name="InstallDir" Value="[#Foo.exe]" Type="string"/> </Component> </Directory> </Directory> </Directory> <Feature Id="ProductFeature" Title="WixProject1" Level="1"> <ComponentRef Id="Foo.exe"/> <ComponentRef Id="Foo.reg"/> </Feature> </Product> </Wix> ==========[END]======================================================= WixProject2: Product.wxs ==========[BEGIN======================================================= <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="d56fabb0-0b2f-477f-b5d1-f0bf0f0fd569" Name="WixProject2" Language="1033" Version="1.0.0.0" Manufacturer="WixProject2" UpgradeCode="04a4766b-1d31-4ab7-bb57-e5d5b02ad6de"> <Package InstallerVersion="200" Compressed="yes" /> <Media Id="1" Cabinet="WixProject2.cab" EmbedCab="yes" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLLOCATION" Name="WixProject2"> <Component Id="Foo.exe" Guid="8337196e-ed72-4957-8581-b2d56835399e"> <File Id="Foo.exe" Name="Foo.exe" Source="C:\Foo.exe" KeyPath="yes"/> </Component> <Component Id="Foo.reg" Guid="8337196e-ed72-4957-8581-b2d56835399f"> <RegistryValue Id="Foo.reg" Action="write" Key="Software\WixProject2" KeyPath="yes" Root="HKLM" Name="InstallDir" Value="[#Foo.exe]" Type="string"/> </Component> </Directory> </Directory> </Directory> <Feature Id="ProductFeature" Title="WixProject2" Level="1"> <ComponentRef Id="Foo.exe"/> <ComponentRef Id="Foo.reg"/> </Feature> </Product> </Wix> ==========[END]======================================================= ________________________________________ From: [EMAIL PROTECTED] [EMAIL PROTECTED] On Behalf Of jmcfadyen [EMAIL PROTECTED] Sent: Wednesday, July 16, 2008 9:32 PM To: wix-users@lists.sourceforge.net Subject: Re: [WiX-users] Component Rules hi chad, in reading this further this doesn't seem to follow known logic. this could easily be confirmed by monitoring the registry at the locations described in my blog post before and after each installation. the logic you present in this case doesn't match the logic I have accustomed myself too or tested in the past. Im very interested to hear of your findings. steve baker-7 wrote: > > Chad, > > The situation you describe is exactly what we will be doing. All 30 of > these web applications get installed to the same machine, all to different > locations on the file system. Until yesterday I believed exactly as you > have stated, the second application updating the Component reference would > cause problems, which is why i have all the duplication between the > projects. After testing with 2 scaled down wix package projects and one > library project what I have found is this. > > Install WebApp1 - web.config is in correct location for WebApp1 > Install WebApp2 - web.config for WebApp2 is in correct location, > web.config for WebApp1 remains untouched. > Uninstall WebApp1 - web.config for WebApp1 is properly removed. > Uninstall WebApp2 - web.config for WebApp2 is properly removed. > > It doesn't matter which app i uninstall first, the behavior is correct. > This has been tested with config files and .NET assemblies, the behavior > is the same. > > This is not the behavior i expected, but now that i have found that this > is what happens, i am very tempted to consolidate the components to the > common library as mentioned earlier. > > Thanks, > > Steve > > ---------------------------------------- > > From: Chad Petersen <[EMAIL PROTECTED]> > Sent: Wednesday, July 16, 2008 11:05 AM > To: [EMAIL PROTECTED]>, "General discussion for Windows > Installer XML toolset." <wix-users@lists.sourceforge.net > Subject: RE: [WiX-users] (no subject) > > Steve, one possible risk is as follows. It'll likely happen if you > install any two MSIs that contain the same Component, but a different > file, on one computer. The first MSI will set the Component reference. > The second MSI will alter that Component reference to point to the new > file. Then if you uninstall the first MSI it will probably remove the > copy of the file from the second installer with it. > > You can mark Components as Permanent and it might leave them alone. > > Since it is not a DLL I don't believe the RefCount would help at all in > this situation. > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Steve > Baker > Sent: Wednesday, July 16, 2008 8:19 AM > To: wix-users@lists.sourceforge.net > Subject: [WiX-users] (no subject) > > Hey all, > > I find myself in a situation where I need some feedback on component > rules. I have over 30 solutions that each have a wix installer project > in them. each solution is a web site that is deployed automatically and > internally. right now i have a ton of duplication between each of the > install projects and am looking to reduce the maintenance overhead. i > have a common wix library project that i have moved the UI and some > launch conditions into. I'd like to move more into this common location > but i get stuck with this particular situation. > > each project contains many components that look like the following: > > < Component Id = " StagingConfiguration " Guid = " > 935B1135-E34D-49DA-843E-D984B8F2C5ED " DiskId = " 1 " > > < File Id = " staging.config " Name = " web.config " Source = " > $(var.Web.UI.ProjectDir)staging.web.config " /> > < Condition > STAGING > > If i moved that component (and i have at least ten more just like it) > into my common wix library each web project would have the same > component guid for its web.config file. I have read over the component > rules again and again and can't find anything specific about doing this, > but it still seems like there is something fundamentally wrong with the > idea. > > I would appreciate if somebody could let me know what the risk is with > having more than one msi contain a component with the same guid (and a > different file). I have nobody here that understands windows installer > to bounce the idea off. > > Thanks, > > Steve > > ------------------------------------------------------------------------ > - > 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 > > > ------------------------------------------------------------------------- > 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 > > -- View this message in context: http://www.nabble.com/Re%3A-Component-Rules-tp18491876p18500445.html Sent from the wix-users mailing list archive at Nabble.com. ------------------------------------------------------------------------- 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 ------------------------------------------------------------------------- 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