<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
	xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
	<?include ../Includes.wxi?>

	<Fragment>
		<!-- For compatibility with command line values from previous versions -->
		<Property Id="INSTALLFOLDER" Secure="yes">
      		<RegistrySearch Id="InstallFolderSearch" Root="HKCR" Key="$(var.RegKeyRoot)" Name="INSTALLFOLDER" Type="raw" />
    	</Property>

		<!-- If a property value has been passed via the command line (which includes when set from the bundle), the registry search will
				 overwrite the command line value, these actions temporarily store the command line value before the registry search
				 is performed so they can be restored after the registry search is complete -->
		<SetProperty Id="SavedInstallFolderCmdLineValue" Value="[INSTALLFOLDER]" Before="AppSearch" Sequence="first" Condition="INSTALLFOLDER" />

		<!-- If a command line value was stored, restore it after the registry search has been performed -->
		<SetProperty Action="RestoreSavedInstallFolderValue" Id="INSTALLFOLDER" Value="[SavedInstallFolderCmdLineValue]" After="AppSearch" Sequence="first" Condition="SavedInstallFolderCmdLineValue" />

		<!-- Normalize INSTALLFOLDER from the command line or registry before assigning INSTALLFOLDER_INNER. -->
		<!-- Case 1: already ends with \$(var.Product)\, keep it unchanged. -->
		<SetProperty Action="SetInstallFolderInnerFromProductDir" Id="INSTALLFOLDER_INNER" Value="[INSTALLFOLDER]" After="RestoreSavedInstallFolderValue" Sequence="first" Condition="INSTALLFOLDER AND INSTALLFOLDER ~&gt;&gt; &quot;\$(var.Product)\&quot;" />
		<!-- Case 2: already ends with \$(var.Product) but has no trailing slash, add the slash. -->
		<SetProperty Action="SetInstallFolderInnerFromProductDirNoSlash" Id="INSTALLFOLDER_INNER" Value="[INSTALLFOLDER]\" After="RestoreSavedInstallFolderValue" Sequence="first" Condition="INSTALLFOLDER AND INSTALLFOLDER ~&gt;&gt; &quot;\$(var.Product)&quot;" />
		<!-- Case 3: ends with a slash but not \$(var.Product)\, append $(var.Product)\. -->
		<SetProperty Action="SetInstallFolderInnerAppendProduct" Id="INSTALLFOLDER_INNER" Value="[INSTALLFOLDER]$(var.Product)\" After="RestoreSavedInstallFolderValue" Sequence="first" Condition="INSTALLFOLDER AND INSTALLFOLDER ~&gt;&gt; &quot;\&quot; AND NOT (INSTALLFOLDER ~&gt;&gt; &quot;\$(var.Product)\&quot; OR INSTALLFOLDER ~&gt;&gt; &quot;\$(var.Product)&quot;)" />
		<!-- Case 4: has no trailing slash and does not end with \$(var.Product), append \$(var.Product)\. -->
		<SetProperty Action="SetInstallFolderInnerAppendSlashProduct" Id="INSTALLFOLDER_INNER" Value="[INSTALLFOLDER]\$(var.Product)\" After="RestoreSavedInstallFolderValue" Sequence="first" Condition="INSTALLFOLDER AND NOT INSTALLFOLDER ~&gt;&gt; &quot;\&quot; AND NOT (INSTALLFOLDER ~&gt;&gt; &quot;\$(var.Product)\&quot; OR INSTALLFOLDER ~&gt;&gt; &quot;\$(var.Product)&quot;)" />

		<!-- INSTALLFOLDER_INNER is defined for compatibility with previous versions of the installer. -->
		<!-- Because we need to use INSTALLFOLDER as the command line argument. -->
		<StandardDirectory Id="ProgramFiles6432Folder">
			<Directory Id="INSTALLFOLDER_INNER" Name="$(var.Product)" />
		</StandardDirectory>

		<StandardDirectory Id="CommonAppDataFolder">
			<Directory Id="App.Data.Folder" Name="$(var.Product)" />
		</StandardDirectory>

		<StandardDirectory Id="ProgramMenuFolder">
			<Directory Id="App.StartMenu" Name="$(var.Product)" />
		</StandardDirectory>

		<StandardDirectory Id="DesktopFolder" />
	</Fragment>
</Wix>
