1

我的想法是提取环境变量的值ZEN_HOME并在安装时将其分配给变量MyInstallDir,如果未设置,则使用其他值设置变量ProgramFileFolder

我面临的错误是,编译时的 wxs 正在搜索值,而不是安装时间。

如何确保在安装时而不是编译时提取值?

<?if %ZEN_HOME% != "" ?>
    <?define MyInstallDir = %ZEN_HOME% ?>
<?else?>
    <?define MyInstallDir="ProgramFilesFolder" ?>
<?endif?>
4

1 回答 1

5

正如您正确提到的,在预处理期间,您尝试执行的操作将在编译时执行。您不能在安装时利用 WiX 变量 - 它完全是 WiX 自定义概念,Windows Installer 对此一无所知。

因此,如果我正确理解您的意图,您将应用程序的安装目录设置为环境变量的某个值(如果它在目标计算机上)。否则,回退到 Program Files 下的文件夹。

您可以通过以下方式接近它。首先,定义类似这样的目录结构:

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLLOCATION" Name="MySetupProject">
         ...
      </Directory>
    </Directory>
</Directory>

这将作为后备。稍后,定义一个set-a-property自定义操作来设置 INSTALLLOCATION,以防定义了环境变量:

<SetProperty Id="INSTALLLOCATION" Value="[%ZEN_HOME]" After="CostFinalize">[%ZEN_HOME]</SetProperty>

您应该在CostFinalize之后安排它,以便能够将目录寻址为属性。

于 2012-04-24T07:36:24.923 回答