Хорошо, я определил, в чем была предыдущая проблема. У меня есть этот фрагмент
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- Start Menu Directory -->
<Directory Id="ProgramMenuFolder">
<Directory Id="InstallProgramMenuFolder" Name="!(loc.ProductName_Folder)"/>
</Directory>
<?if $(var.Platform)=x64?>
<!-- Program files folder -->
<Directory Id="ProgramFiles64Folder">
<Directory Id="APPLICATIONROOT" Name="!(loc.ProductName_RootFolder)">
<Directory Id="INSTALLFOLDER" Name="!(loc.ProductName_Folder)" />
</Directory>
</Directory>
<?else?>
<!-- Program files folder -->
<Directory Id="ProgramFilesFolder">
<Directory Id="APPLICATIONROOT" Name="!(loc.ProductName_RootFolder)">
<Directory Id="INSTALLFOLDER" Name="!(loc.ProductName_Folder)" />
</Directory>
</Directory>
<?endif?>
</Directory>
Теперь для версии пользовательского интерфейса вы можете просто изменить каталог, который хотите (по умолчанию C: \ Program Files \ RootFolder \ AppRootFolder), но если я попробую использовать
msiexec /i "mymsi.msi" TARGETDIR="C:\test", then it still installs in Program Files. What I have determined, is regardless what you specific TARGETDIR as, it'll install C:\Program Files\RootFolder\AppRootFolder\.
Я думаю, мне нужно заменить ProgramFiles64Folder
ID на все, что пользователь вводит с помощью командной строки, если они действительно что-то предоставили, но вопрос в том, как могу я проверить, предоставили ли они что-нибудь? Я полагаю, я мог бы создать свойство publi c и назвать его «USERDEFPATH» или что-то в этом роде, затем вы можете добавить это как параметр в msiexe c, но тогда как я могу сделать оператор if, чтобы сказать: «если USERDEFPATH не пустой, используйте его вместо ProgramFiles64Folder, иначе используйте ProgramFiles64Folder "? ЕСЛИ это имело смысл ...