WiX:如果路径中没有特定的可执行文件,则中止安装
我目前正在使用WiX打包软件,该软件需要Java才能运行。因此,我想在安装过程中检查WiX:如果路径中没有特定的可执行文件,则中止安装,wix,dependencies,windows-installer,Wix,Dependencies,Windows Installer,我目前正在使用WiX打包软件,该软件需要Java才能运行。因此,我想在安装过程中检查java.exe是否位于路径中的某个位置,如果找不到,则中止。中的解决方案接近我的需要,但我不想搜索注册表,而是想在PATH变量的目录中查找依赖项 WiX很容易做到这一点吗?如果没有,是否可以根据自定义操作的返回值设置属性值。然后,我可以编写一个批处理脚本,查找Java并相应地设置的属性。我将立即编写一个自定义操作,该操作将执行以下操作: 获取PATH环境变量的值。您可以使用[%PATH]语法 通过按拆分来解析
java.exe
是否位于路径中的某个位置,如果找不到,则中止。中的解决方案接近我的需要,但我不想搜索注册表,而是想在PATH
变量的目录中查找依赖项
WiX很容易做到这一点吗?如果没有,是否可以根据自定义操作的返回值设置属性值。然后,我可以编写一个批处理脚本,查找Java并相应地设置
的属性。我将立即编写一个自定义操作,该操作将执行以下操作:
- 获取PATH环境变量的值。您可以使用
[%PATH]
语法
- 通过按
拆分来解析它代码>,迭代并查找有问题的目录
- 检查目录是否存在,以及是否存在
java.exe
- 将
JAVA\u已安装
property设置为1
(如果有),否则根本不进行设置。这可以通过DTF(WiX工具集提供的框架)的会话[“JAVA_已安装”]=1来完成
- 使用
JAVA\u已安装属性添加
元素
注意:自定义操作应该在启动条件操作之前安排,并且应该位于两个序列中(InstallUISequence和InstallExecuteSequence)根据Yan的回答,我实现了如下功能:
我的WiX源包含:
<Binary Id="B.CustomActionsScript" SourceFile="CustomActions.js" />
<CustomAction
Id="CA.runJava"
BinaryKey="B.CustomActionsScript"
JScriptCall="runJava"
Execute="immediate"
Return="check" />
<Condition Message="The Java Runtime Environment is not installed.">
Installed OR JAVA_IS_INSTALLED
</Condition>
<InstallUISequence>
<Custom Action="CA.runJava" Before="LaunchConditions">NOT Installed</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="CA.runJava" Before="LaunchConditions">NOT Installed</Custom>
</InstallExecuteSequence>
我不是在路径中查找java.exe
,而是通过尝试执行来检查是否安装了java。如果Java无法执行,Exec
抛出异常,并且Java\u已安装
从未设置
function runJava() {
try {
var shell = new ActiveXObject("WScript.Shell");
shell.Run("java -version", 0, true);
Session.Property("JAVA_IS_INSTALLED") = "1";
} catch (ex) {
}
return 1;
}