jvm InnoSetup:检测Java是32位还是64位
在InnoSetup中,我运行以下代码:
J32 := ShellExec('', 'java', '-d32 -version', '', SW_HIDE, ewWaitUntilTerminated, ec);
J64 := ShellExec('', 'java', '-d64 -version', '', SW_HIDE, ewWaitUntilTerminated, ec);
{
在命令行中:
> 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);
它们都返回True
和ec = 1
,尽管我有一个64位java
似乎Exec
和ShellExec
返回True
,因为它们成功运行了java
,但它们不跟踪错误代码java
返回
# 1 楼答案
Inno安装帮助说明:
http://www.jrsoftware.org/ishelp/index.php?topic=setup_architecturesinstallin64bitmode
所以在[代码]部分的64位模式下,所有内容都是32位的。它将执行32位Java,c:\Windows\System32指向WOW64文件夹,即System32的32位版本
此答案显示了如何在注册表中检查Java:
Need help on Inno Setup script - issue in check the jre install
根据这个答案,下面的代码似乎可以用来检查是否安装了64位Java 1.7+:
# 2 楼答案
我想在多个Inno安装项目中使用一些东西,所以我编写了一个DLL来检测Java详细信息(主目录等):
https://github.com/Bill-Stewart/JavaInfo
从这里下载:https://github.com/Bill-Stewart/JavaInfo/releases
下载内容包括一个示例Inno Setup
.iss
脚本,该脚本演示了如何使用DLL函数(包括如何检查是32位还是64位)