以msi(wxs)在安装时提取环境变量

时间:2012-04-24 06:33:24

标签: wix windows-installer

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

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

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

ProgramFileFolder

1 个答案:

答案 0 :(得分: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之后安排它,以便能够将目录作为属性进行处理。