Setting directory of ComponentGroupRef in Wix?

components, heat, path, wix

Solution

You can pass the Id of the directory you want to reference to heat with the `-dr` argument like

heat -dr AutogeneratedComponentsDir

Or DirectoryRefId attribute if you are using the HeatDirectory task in msbuild.

Then just define the location of that directory in your main Product.wxs.

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLDIR" Name="YourProduct">
      <Directory Id="AutogeneratedComponentsDir"/>
    </Directory>
  </Directory>
</Directory>

Problem

I have used the Heat tool to generate a wxs file based on a folder whose contents I want to install. This gives me a large file like this: ``` <?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Fragment> <DirectoryRef Id="TARGETDIR"> <Directory Id="dir1FC8A0605F7DF8B33E3EECB0A1270FA2" Name="DirectoryName" /> </DirectoryRef> </Fragment> <Fragment> <ComponentGroup Id="ComponentGroupId"> <Component Id="cmp1FB67A60B41F3170889B7E5739A23560" Directory="dir1FC8A0605F7DF8B33E3EECB0A1270FA2" Guid="{2DC3B790-D29C-4090-B4CF-5C27687C6ABE}"> <File Id="filF1E1262E52254B1846C7CB2393126A6F" KeyPath="yes" Source="PathToFile" /> </Component> </ComponentGroup> </Fragment> </Wix> ``` In my main Wix file, Product.wxs, I have a feature that references the above ComponentGroup that was created by Heat. The feature looks something like this: ``` <Feature Id="FeatureId" Title="FeatureTitle" Level="1" AllowAdvertise="no" Absent="disallow" Description="Feature description."> <ComponentGroupRef Id="ComponentGroupId" /> </Feature> ``` This is working but when I run my installer, the files within the component group are placed in the root of the C drive (i.e. C:\DirectoryName) but I would like them to go into Program Files (e.g. C:\Program Files\DirectoryName). Any ideas? Thanks, Alan

Original source