Wix 在msi(wxs)中安装时提取环境变量
我的想法是提取环境变量ZEN_HOME的值,并在安装时将其分配给变量MyInstallDir,如果未设置,则使用其他值ProgramFileFolder设置该变量 我面临的错误是,wxs在编译时搜索值,而不是在安装时 如何确保值是在安装时提取的,而不是在编译时提取的Wix 在msi(wxs)中安装时提取环境变量,wix,windows-installer,Wix,Windows Installer,我的想法是提取环境变量ZEN_HOME的值,并在安装时将其分配给变量MyInstallDir,如果未设置,则使用其他值ProgramFileFolder设置该变量 我面临的错误是,wxs在编译时搜索值,而不是在安装时 如何确保值是在安装时提取的,而不是在编译时提取的 <?if %ZEN_HOME% != "" ?> <?define MyInstallDir = %ZEN_HOME% ?> <?else?> <?define MyInst
<?if %ZEN_HOME% != "" ?>
<?define MyInstallDir = %ZEN_HOME% ?>
<?else?>
<?define MyInstallDir="ProgramFilesFolder" ?>
<?endif?>
正如您正确提到的那样,您尝试执行的操作将在预处理期间在编译时执行。您不能在安装时利用WiX变量-这完全是WiX自定义概念,Windows Installer对此一无所知 因此,如果我正确理解您的意图,您将把应用程序的安装目录设置为环境变量的某个值(如果它在目标机器上)。否则,请返回到“程序文件”下的文件夹 你可以用下面的方法来处理它。 首先,定义类似以下内容的目录结构:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="MySetupProject">
...
</Directory>
</Directory>
</Directory>
这将成为一种退路。稍后,定义自定义操作以设置INSTALLLOCATION,以防定义了环境变量:
<SetProperty Id="INSTALLLOCATION" Value="[%ZEN_HOME]" After="CostFinalize">[%ZEN_HOME]</SetProperty>
您应该在之后安排它,以便能够将目录作为属性进行寻址。您尝试执行的操作将在编译时执行,正如您正确提到的,在预处理期间。您不能在安装时利用WiX变量-这完全是WiX自定义概念,Windows Installer对此一无所知 因此,如果我正确理解您的意图,您将把应用程序的安装目录设置为环境变量的某个值(如果它在目标机器上)。否则,请返回到“程序文件”下的文件夹 你可以用下面的方法来处理它。 首先,定义类似以下内容的目录结构:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="MySetupProject">
...
</Directory>
</Directory>
</Directory>
这将成为一种退路。稍后,定义自定义操作以设置INSTALLLOCATION,以防定义了环境变量:
<SetProperty Id="INSTALLLOCATION" Value="[%ZEN_HOME]" After="CostFinalize">[%ZEN_HOME]</SetProperty>
您应该在之后安排它,以便能够将目录作为属性进行寻址。Ahh..非常感谢。wxs末端已经有一条既有线路:我要把它移走吗?我对msi的概念非常陌生,基本上是一个Linux的家伙,但是我们的产品有Linux和Windows版本,这就是问题的原因。或者你想让我添加Well,actually元素只是一对set-a-property自定义动作定义元素的快捷方式,并将其调度到安装序列元素中。我认为您应该首先了解名为SetInstallationDirectory的现有自定义操作的功能,然后根据需要调整它,或者添加一个新操作(如果完全是出于其他目的)。如果没有看到SetInstallationDirectory自定义操作的定义,很难理解…啊..我明白了。所以我在这里附加了禅宗家。我希望这就是你想要设定的,对吗?是的,这就是想法。正如我在回答中提到的那样,确保它被正确地安排在成本确定之后。啊……非常感谢。wxs末端已经有一条既有线路:我要把它移走吗?我对msi的概念非常陌生,基本上是一个Linux的家伙,但是我们的产品有Linux和Windows版本,这就是问题的原因。或者你想让我添加Well,actually元素只是一对set-a-property自定义动作定义元素的快捷方式,并将其调度到安装序列元素中。我认为您应该首先了解名为SetInstallationDirectory的现有自定义操作的功能,然后根据需要调整它,或者添加一个新操作(如果完全是出于其他目的)。如果没有看到SetInstallationDirectory自定义操作的定义,很难理解…啊..我明白了。所以我在这里附加了禅宗家。我希望这就是你想要设定的,对吗?是的,这就是想法。正如我在回答中提到的那样,确保它被正确地安排在成本最终确定之后。