【发布时间】:2011-11-06 14:49:19
【问题描述】:
在 InnoSetup 中我运行以下代码:
J32 := ShellExec('', 'java', '-d32 -version', '', SW_HIDE, ewWaitUntilTerminated, ec);
J64 := ShellExec('', 'java', '-d64 -version', '', SW_HIDE, ewWaitUntilTerminated, ec);
J32 和 J64 都是 True。
在命令行中:
> java -d32 -version
Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.
> echo %errorlevel%
1
> java -d64 -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
> echo %errorlevel%
0
为什么ShellExec() 会忽略Params?
我也试过Exec():
// this way
J32 := Exec('java', '-d32 -version', '', SW_HIDE, ewWaitUntilTerminated, ec);
// and this way
J32 := Exec('>', 'java -d32 -version', '', SW_HIDE, ewWaitUntilTerminated, ec);
尽管我有一个 64 位 java,但它们都返回 True 和 ec = 1。
Exec 和 ShellExec 似乎返回 True 因为它们成功运行 java,但它们不跟踪错误代码 java 返回。
【问题讨论】:
-
ShellExec 从不等待进程完成。但是,您的倒数第二个命令 (
Exec('java', '-d32 -version' ...) 看起来不错。ec运行后是什么?J32中有什么内容? -
Pascal 脚本:ShellExec 文档说:“Wait 参数指定函数是立即返回还是等待启动的进程终止或空闲。”
-
ec = 1。调用成功时始终为 1。J32 = True -
@Gray:谢谢,我知道这个问题。但是,它询问是否从 Java 程序中检测 JVM 版本。
标签: java jvm inno-setup