Changing the TARGETDIR in WiX
wix, wix3.6
Solution
The following modifications were needed:
<CustomAction Id="SetTARGETDIR"
Directory="TARGETDIR"
Value="[ProgramFilesFolder][Manufacturer]\[ProductName]"
Return="check" />
and
<InstallExecuteSequence>
<Custom Action="SetTARGETDIR" After="InstallValidate" />
</InstallExecuteSequence>
Explanation: Use the Directory attribute instead of a property (it's a type 35 custom action) and schedule this action after `InstallValidate` in the execute sequence - that's when directories are checked for write access and truly set.
(Thanks to Narina Chandra Sekhar, from the WiX user group for the answer on this.)
Problem
I am having problems setting the TARGETDIR path. I used `dark.exe` to reverse engineer a working MSI file and read any posts I could find on this subject, but I seem to be unable to set the TARGETDIR to point to the path `ProgramFiles\Manufacturer\Product`. Below is a distilation of my WXS file which results in my application being installed to the root of my D-drive for some reason: ``` <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="FBL - Some App" Language="1033" Version="1.0.0.0" Manufacturer="Foo & Bar Limited" UpgradeCode="780286c6-e064-4402-80d8-dd2c68b56c04"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Comments="Performs some operation that is important" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <Media Id="1" Cabinet="App.1.0.0.cab" EmbedCab="yes" /> <CustomAction Id="setTARGETDIR" Property="TARGETDIR" Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" Execute="firstSequence" Return="check" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Component Id="C__App.exe" Guid="{074586E9-A675-2734-A4CD-1CE520922A41}"> <File Id="F__App.exe" Name="App.exe" KeyPath="yes" Assembly=".net" AssemblyManifest="F__App.exe" AssemblyApplication="F__App.exe" DiskId="1" Source="D:\SomePath\bin\Debug\App.exe" /> </Component> </Directory> <Feature Id="DefaultFeature" ConfigurableDirectory="TARGETDIR" Level="1"> <ComponentRef Id="C__App.exe" Primary="yes" /> </Feature> <Icon Id="favicon.ico" SourceFile="d:\SomePath\favicon.ico" /> <Property Id="ARPPRODUCTICON" Value="favicon.ico" /> <UI /> <InstallExecuteSequence> <Custom Action="setTARGETDIR" Before="CostFinalize" /> </InstallExecuteSequence> </Product> </Wix> ``` I'm sure I am missing something simple, but I cannot find any further information on what to do from here.