0

具体来说,在我的 WIX 部署项目中,我试图将 TARGETDIR 设置为 [ProgramFilesFolder][Manufacturer],以便当我的自定义修改版 WixUI_InstallDir 打开 InstallDirDlg 时,它默认为该路径而不是驱动器根目录。

根据我发现的关于设置 TARGETDIR在对话框之间插入操作以及文档中的各种数据的问题的答案,我一直在尝试各种形式的自定义操作,如下所示:

<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 的使用从根本上改变了我应该期望自定义操作触发的方式。但我似乎找不到任何线索为什么会这样。

4

1 回答 1

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

如果我正确理解了您的示例,那么您将包含另一个带有制造商名称的子目录。请注意,不能将属性用作目录名称。您可以使用$(var.variables)or!(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. 请参阅标准操作参考以了解它们的作用,然后查看安装程序日志。您将看到标准操作何时发生,然后您可以相应地安排您的自定义操作。

例如:

<InstallUISequence>
  <Custom Action="MyCA" Before="AppSearch" />
</InstallUISequence>

确保MyCA在第一个标准操作发生之前执行自定义操作。

于 2013-09-19T09:57:29.347 回答