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

kin*_*er1 1 windows-installer wix

我的想法是提取环境变量的值ZEN_HOMEMyInstallDir在安装时将其分配给变量,如果未设置,则将变量设置为其他值ProgramFileFolder.

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

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

<?if %ZEN_HOME% != "" ?>
    <?define MyInstallDir = %ZEN_HOME% ?>
<?else?>
    <?define MyInstallDir="ProgramFilesFolder" ?>
<?endif?>
Run Code Online (Sandbox Code Playgroud)

Yan*_*nko 5

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

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

您可以通过以下方式处理它.首先,定义类似于此的目录结构:

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLLOCATION" Name="MySetupProject">
         ...
      </Directory>
    </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

这将作为后备.稍后,定义一个set-a-property自定义操作,以便在定义了环境变量的情况下设置INSTALLLOCATION:

<SetProperty Id="INSTALLLOCATION" Value="[%ZEN_HOME]" After="CostFinalize">[%ZEN_HOME]</SetProperty>
Run Code Online (Sandbox Code Playgroud)

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