I want to copy two file from existing location to new location using WIX Installer.
INSTALLDIR and Destination Directory are already defined. And In SourceProperty for first I want to use INSTALLDIR\P\X\Y
and In second I want to use INSTALLDIR\Q\X\Y
<ComponentGroup Id="aYML" Directory="INSTALLDIR">
<Component Id="CopyaYML" Guid="" Transitive="yes">
<CopyFile Id ="aYMLcopy" SourceProperty="INSTALLDIR\P\X\Y" SourceName="A.yml" DestinationProperty="Destination"/>
<CreateFolder/>
</Component>
</ComponentGroup>
<ComponentGroup Id="bYML" Directory="INSTALLDIR">
<Component Id="CopybYML" Guid="" Transitive="yes">
<CopyFile Id ="bYMLcopy" SourceProperty="INSTALLDIR\Q\X\Y" SourceName="B.yml" DestinationProperty="Destination"/>
<CreateFolder/>
</Component>
</ComponentGroup>
As \ is not allowed in WIX how to achieve this?
It has to be a property name, which has a limited character set of letters, numbers, and underscores. You could use a SetProperty
custom action (type 19) to format a value using the directory ID and the file name, or even the [#fileId]
property format, though that's not reliable in older versions of Windows Installer.
Before InstallFiles
but after CostFinalize
, you could do something like this:
<SetProperty Id="AYMLPATH" Before="InstallFiles" Sequence="execute" value="[ParentDirectoryId]A.yml" />
Though, it may be easier to just use the SourceDirectory
attribute and specify the directory ID.
Copying files, though, can cause issues for some servicing scenarios. For example, if you copy files in a patch, the changes can't be rolled back. If the files are small, just duplicate the files. There are even tricks to duplicating the file records, but keeping a single file blob in a CAB, but is outside the scope of this answer.