kin*_*er1 1 windows-installer wix
我的想法是提取环境变量的值ZEN_HOME并MyInstallDir在安装时将其分配给变量,如果未设置,则将变量设置为其他值ProgramFileFolder.
我面临的错误是,编译时的wxs正在搜索值,而不是安装时间.
如何确保在安装时提取值而不是编译时?
<?if %ZEN_HOME% != "" ?>
<?define MyInstallDir = %ZEN_HOME% ?>
<?else?>
<?define MyInstallDir="ProgramFilesFolder" ?>
<?endif?>
Run Code Online (Sandbox Code Playgroud)
您正在尝试执行的操作将在编译时执行,正如您在预处理期间所正确提到的那样.您无法在安装时利用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之后安排它,以便能够将目录作为属性进行寻址.