繁体   English   中英

检查是否存在环境变量作为WiX安装程序的先决条件

[英]Check the presence of an environment variable as a prerequisite to a WiX Installer

我正在开发我的第一个基于WiX的安装程序,我需要确保在安装之前未设置特定的环境变量。 这是为了确保我正在安装的客户端的另一个实例尚未安装在不同的路径下(它不使用与我使用的相同的GUID。)

此客户端也不设置任何注册表项,也没有已知的检查路径。

预先感谢您的帮助。

编辑:所以我尝试了两种不同的方法,但都没有奏效。

第一种方法(方法2注释掉了。)我在<Product>元素中有这个XML。

<?ifdef env.MY_VAR ?>

<Condition Message="MY_VAR already defined.">0</Condition>

<?endif?>

不幸的是,这似乎总是评估为true,无论%MY_VAR%是否设置,并且显示消息,并且安装程序正常退出(正如我所希望的那样)。

第二种方法。 (方法1注释掉了),我在<Product>元素中有这个XML。 <Condition Message="Error: MY_VAR environment variable already set."><![CDATA[MYVAR <> ""]]></Condition>

我还在Product中引用的<Fragment>定义了一个<CustomAction> ,如下所示: <CustomAction Id="GetMyVar" Property="MYVAR" Value="[%MY_VAR]" />

<CustomAction>按顺序排列在<InstallExecuteSequence>元素内: <Custom Action="GetTNSAdmin" After="LaunchConditions" />

这也导致了我在第一种方法中看到的相同的“总是评估为真”的行为。

我究竟做错了什么?

请记住,Wix是声明性的。 您试图将过程代码与Wix的声明性结合起来。 你会度过一段美好的时光。

你的第一个方法失败了,因为ifdef是一个编译时指令,很像C / C ++预处理器的ifdef。 它在运行时不会帮助你。

不确定你的第二种方法是尝试使用CDATA块。 你虽然很近:

<Condition Message="An important environment variable is already defined.">
NOT %IMPORTANT_ENV_VAR
</Condition>

正如PhilDW所说,你需要在环境变量之前加一个%并添加NOT条件。 请记住,如果条件为FALSE,则会显示该消息。

在这里阅读发射条件

从这些条件语句构建启动条件:

http://msdn.microsoft.com/en-us/library/aa368012(v=vs.85).aspx

所以它看起来像NOT%ENVNAME的条件应该工作。

您可以在ComponentSearch中使用来自其他安装的组件guid:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/componentsearch.html

这些并不关心路径 - 它只是告诉你是否安装了组件guid。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM