具体来说,在我的WIX部署项目中,我正在尝试将TARGETDIR设置为[ProgramFilesFolder] [制造商],以便当我的自定义修改版本的WixUI_InstallDir打开InstallDirDlg时,它默认为该路径而不是驱动器根目录。
根据我在setting TARGETDIR找到关于inserting actions between dialogs,documentation和各种数据的问题的答案,我一直在尝试各种形式的自定义操作:
<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" Value="[ProgramFilesFolder][Manufacturer]" Execute="immediate" />
我也尝试过Property =“WIXUI_INSTALLDIR”,Execute =“firstSequence”,以及硬编码值。
我尝试使用InstallExecuteSequence:
调用它<InstallExecuteSequence>
<Custom Action="SetTARGETDIR" After="FindRelatedProducts"></Custom>
</InstallExecuteSequence>
当然,我试图在许多不同事件之前或之后插入。 (一个令人讨厌的障碍是我希望Before =“InstallDirDlg”是插入动作的最佳位置,但是当我尝试将任何对话框用作事件时,我收到编译错误。)
我还尝试在调用InstallDirDlg时在UI片段中发布操作:
<Publish Dialog="WelcomeDlg" Control="Next" Event="DoAction" Value="SetTARGETDIR">NOT Installed</Publish>
我尝试过的一些事情会引发错误,但大多数时候,问题只是TARGETDIR没有改变。默认安装路径仍然是驱动器根目录。我最好的猜测是,有一些关于使用这个WixUI的东西,从根本上改变了我应该期望自定义动作触发的方式。但我似乎无法找到任何线索,为什么会这样。
答案 0 :(得分:1)
如果使用WixUI_InstallDir模板,则有一个特定的属性用于定义安装目录。此属性称为WIXUI_INSTALLDIR
。请查看以下代码段,了解其工作原理:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="TESTFILEPRODUCTDIR" Name="Test File">
...
</Directory>
</Directory>
</Directory>
...
<Property Id="WIXUI_INSTALLDIR" Value="TESTFILEPRODUCTDIR" />
<UIRef Id="WixUI_InstallDir" />
此示例直接取自此处的文档:WixUI_InstallDir Dialog Set。
如果我已正确理解您的示例,那么您将包含具有制造商名称的另一个子目录。 请注意它是not possible to use properties as directory names。您可以改用我建议使用本地化变量。
E.g:$(var.variables)
或!(loc.localizationVariables)
。
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="ManufacturerDir" Name="!(loc.manufacturer)">
<Directory Id="TESTFILEPRODUCTDIR" Name="Test File">
...
</Directory>
<Directory>
</Directory>
</Directory>
另请注意:如果要在显示对话框之前执行自定义操作,则必须在InstallUISequence
中安排自定义操作。请参阅Standard Actions Reference以了解他们的操作,然后查看安装程序日志。您将看到标准操作何时发生,然后您可以相应地安排自定义操作。
例如:
<InstallUISequence>
<Custom Action="MyCA" Before="AppSearch" />
</InstallUISequence>
确保在第一个标准操作发生之前执行MyCA
自定义操作。