I'm using WiX 3.5 (an RC from late in 2010). My core problem is that I have an installer that needs to deploy the same files to multiple Components. In this thread on StackOverflow (http://stackoverflow.com/questions/4941602/features-installed-to-different-locations-but-referencing-the-same-components), Rob Mensching states:
>A Component can only be installed once via an MSI. Each Component can only be >installed to a single Directory. To have the contents of a Component installed >to two different locations, you either have to create another Component with >the same content or try to use the CopyFile element to duplicate the content. The files are referenced in the .wxs via a .wxi include, which means their Id properties are static. I tried various methods of namespacing these Ids at include time, but that didn't work for various reasons (I can go into these if necessary, but would prefer not to for brevity). So, for now, I've eliminated the possibility of duplicating the File elements per Component. That leaves me with just the CopyFile option. I created a new Component for the shared files that installs to its own directory and I added a single CopyFile element (using a pattern of "*" in the SourceName attribute) to each of the existing Components that should copy the files. The new Component installs correctly but, unfortunately, the CopyFile elements seem to do nothing. The files just don't copy. In trying to debug the issue, I installed with msiexec from the command line with full logging (/lvx*) and could find no trace of relevant file copy logging. Without any indication of what I'm doing wrong, I can't debug the problem and I'm hoping somebody on this list can help me. Here are the approaches I've tried so far (none have worked): First Approach Use CopyFile's SourceDirectory and DestinationDirectory attributes with a SourceName pattern. Note that I've also tried with a pattern of "*.*", a pattern of ".*", pattern of "*.dll", and without a pattern (specifying a single specific file to be copied), which also did not work. <Directory Id ="ROOT_INSTALL_DIR"> <Directory Id ="SERVICES_DIR" Name ="Services"> <Directory Id="SHARED_BINARIES_DIR" Name="Binaries"> <Component Id="SharedBinaries" Guid="49779A88-652A-11E0-AE98-1EF2DFD72085"> <?include $(var.BUILD_DIR)\Shared.wxi ?> </Component> </Directory> <Directory Id ="SERVICE_ONE_DIR" Name="ServiceOne"> <Component Id="ServiceOneComponent" Guid="C743A1E6-7E71-4196-979F-F3218421BCCE"> <CopyFile Id="ServiceOneSharedBinaries" SourceDirectory="SHARED_BINARIES_DIR" SourceName="*" DestinationDirectory="SERVICE_ONE_DIR"/> </Component> </Directory> <!-- More services with similar CopyFile elements --> </Directory> </Directory> <Feature Id="SharedBinariesFeature" Level="1"> <ComponentRef Id="SharedBinaries" /> </Feature> <Feature Id="ServiceOneFeature" Level="1"> <ComponentRef Id="ServiceOneComponent"/> </Feature> Second Approach Use SourceProperty and DestinationProperty attributes instead of the *Directory attributes. <Directory Id ="ROOT_INSTALL_DIR"> <Directory Id ="SERVICES_DIR" Name ="Services"> <Directory Id="SHARED_BINARIES_DIR" Name="Binaries"> <Component Id="SharedBinaries" Guid="49779A88-652A-11E0-AE98-1EF2DFD72085"> <?include $(var.BUILD_DIR)\Shared.wxi ?> </Component> </Directory> <Directory Id ="SERVICE_ONE_DIR" Name="ServiceOne"> <Component Id="ServiceOneComponent" Guid="C743A1E6-7E71-4196-979F-F3218421BCCE"> <CopyFile Id="ServiceOneSharedBinaries" SourceProperty="SHARED_BINARIES_DIR" SourceName="*" DestinationProperty="SERVICE_ONE_DIR"/> </Component> </Directory> <!-- More services with similar CopyFile elements --> </Directory> </Directory> <Feature Id="SharedBinariesFeature" Level="1"> <ComponentRef Id="SharedBinaries" /> </Feature> <Feature Id="ServiceOneFeature" Level="1"> <ComponentRef Id="ServiceOneComponent"/> </Feature> Third Approach Explicitly create new properties with CustomActions and use those properties in SourceProperty and DestinationProperty - this seemed silly and redundant, but it appears that it worked in this thread (http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/CopyFile-doesn-t-work-td2592289.html). From the install log, I can tell that the new properties were created properly, but nothing else seems to have changed: <CustomAction Id="SetSharedBinariesDirProperty" Property="SHARED_BINARIES_DIR_PROPERTY" Value="[SHARED_BINARIES_DIR]"/> <CustomAction Id="SetServiceOneDirProperty" Property="SERVICE_ONE_DIR_PROPERTY" Value="[SERVICE_ONE_DIR]"/> <Directory Id ="ROOT_INSTALL_DIR"> <Directory Id ="SERVICES_DIR" Name ="Services"> <Directory Id="SHARED_BINARIES_DIR" Name="Binaries"> <Component Id="SharedBinaries" Guid="49779A88-652A-11E0-AE98-1EF2DFD72085"> <?include $(var.BUILD_DIR)\Shared.wxi ?> </Component> </Directory> <Directory Id ="SERVICE_ONE_DIR" Name="ServiceOne"> <Component Id="ServiceOneComponent" Guid="C743A1E6-7E71-4196-979F-F3218421BCCE"> <CopyFile Id="ServiceOneSharedBinaries" SourceProperty="SHARED_BINARIES_DIR_PROPERTY" SourceName="*" DestinationProperty="SERVICE_ONE_DIR_PROPERTY"/> </Component> </Directory> <!-- More services with similar CopyFile elements --> </Directory> </Directory> <Feature Id="SharedBinariesFeature" Level="1"> <ComponentRef Id="SharedBinaries" /> </Feature> <Feature Id="ServiceOneFeature" Level="1"> <ComponentRef Id="ServiceOneComponent"/> </Feature> <InstallExecuteSequence> <Custom Action="SetSharedBinariesDirProperty" Before="InstallInitialize"/> <Custom Action="SetServiceOneDirProperty" Before="InstallInitialize"/> </InstallExecuteSequence> Any help or insight is greatly appreciated! Amber Scouras // Senior Software Engineer // The Trade Desk follow us @ twitter<http://twitter.com/TheTradeDeskinc> // facebook<http://www.facebook.com/TheTradeDesk> // linkedin<http://www.linkedin.com/company/892001> // www.thetradedesk.com<http://www.thetradedesk.com/> This email could contain material that is subject to copyright or trade protection, confidential and/or privileged and, in all cases, provided for the sole use of the intended recipient. Any reliance or distribution by others or forwarding without express permission is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. ------------------------------------------------------------------------------ Forrester Wave Report - Recovery time is now measured in hours and minutes not days. Key insights are discussed in the 2010 Forrester Wave Report as part of an in-depth evaluation of disaster recovery service providers. Forrester found the best-in-class provider in terms of services and vision. Read this report now! http://p.sf.net/sfu/ibm-webcastpromo _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users