tags:

views:

89

answers:

2

I'm trying to make an install that puts a copy of the same files in multiple places...

is there a simple way to do this?

eg. if I wanted to put a.txt b.txt c.txt into all of the following directories :-

.\Blah\
.\Txts\
.\Examples\

+3  A: 

Simply create multiple components which reference the same file, but install it to different locations. The only gotcha is that you cannot use two <File Source="somefile"/> elements referencing the same file because they will get the same auto-generated ID. Explicitly give the file elements different IDs to avoid that problem.

<DirectoryRef Id="directory1">
   <Component Id="somefile-component1" Guid="...guid1..." >
      <File Id="somefile-id1" Source="/path/to/somefile"/>
   </Component>
</DirectoryRef>

<DirectoryRef Id="directory2">
   <Component Id="somefile-component2" Guid="...guid2..." >
      <File Id="somefile-id2" Source="/path/to/somefile"/>
   </Component>
</DirectoryRef>
Wim Coenen
yeah, I kindda figured I could do that, but thats painful, it means seperate IDs and GUIDs, etc etc.The other option is CopyFile it seems, but then you have to handle the uninstall of them
Keith Nicholas
You could also use the same components in multiple installers which each define the referenced directory differently. But then you'll end up with multiple MSI files. Would you like for me to elaborate on that approach?
Wim Coenen
I'll accept this answer as this was what I ended up effectively doing. I don't like the idea of all the duplication so I ended up writing a program that generated the Wix xml for me and handled automatically the duplication. Feels like wix is too raw and a higher level of abstraction is needed to write installers.
Keith Nicholas
+2  A: 

Windows Installer has its own concept for this called "DuplicateFiles". It only works if the files are actually identical, but it sounds like that's what you want. In WIX you implement this via the CopyFile element:

http://wix.sourceforge.net/manual-wix2/wix%5Fxsd%5Fcopyfile.htm

I haven't actually tried it, but it should look something like this

<Component Id='Manual' Guid='11234876-574D-4A9A-A266-5B5EC2C022A4' >
  <File Id='Manual' Name='Manual.pdf' DiskId='1' Source='Manual.pdf' KeyPath='yes'>
    <CopyFile  Id='MyDuplicateFile1' DestinationProperty ='DesktopFolder'/>
  </File>
</Component>
Glytzhkof
Does this remove the copy on uninstall?
Wim Coenen
Yes, it actually does - as long as component that did the duplication is being uninstalled (it might not be if it was set permanent).
Glytzhkof