我的想法是提取环境变量ZEN_HOME
的值并在安装时将其分配给变量MyInstallDir
,如果未设置,则将变量设置为其他值{{1 }}
我面临的错误是wxs在编译时正在搜索值,而不是安装时间。
如何确保在安装时提取值而不是编译时?
ProgramFileFolder
答案 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之后安排它,以便能够将目录作为属性进行处理。