我目前正在使用需要运行Java的WiX打包软件。因此,我想在安装期间检查java.exe
是PATH
中的某个位置,如果找不到则会中止。 http://sourceforge.net/mailarchive/message.php?msg_id=23451655中的解决方案接近我的需求,但我不想搜索注册表,而是想在PATH
变量的目录中查找依赖项。
WiX可以轻松实现吗?如果不是,是否可以根据自定义操作的返回值设置属性的值。然后我可以编写一个查找Java的批处理脚本,并相应地设置<Condition>
的属性。
答案 0 :(得分:4)
我会立即制作一个自定义操作,可以执行以下操作:
[%PATH]
语法;
拆分,迭代并找到有问题的目录java.exe
是否存在JAVA_IS_INSTALLED
属性设置为1
,以防它存在,否则根本不设置。这可以使用DTF(随WiX Toolset提供的框架)session["JAVA_IS_INSTALLED"] = 1
完成。<Condition>
属性JAVA_IS_INSTALLED
元素
注意:应该在LaunchConditions操作之前安排自定义操作,并且应该驻留在两个序列中(InstallUISequence和InstallExecuteSequence)
答案 1 :(得分:2)
根据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>
CustomActions.js
包含此功能:
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;
}
而不是在java.exe
中查找PATH
而不是通过尝试执行它来检查Java是否已安装。如果无法执行Java Exec
则抛出异常,并且永远不会设置JAVA_IS_INSTALLED
。