在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
,但他们没有跟踪错误代码{ {1}}返回。
答案 0 :(得分:1)
Inno设置帮助说明:
http://www.jrsoftware.org/ishelp/index.php?topic=setup_architecturesinstallin64bitmode
{sys}常量返回的System32路径映射到64位 在[Dirs],[Files]中使用时默认为系统目录, [InstallDelete],[Run],[UninstallDelete]和[UninstallRun] 部分。这是因为安装/卸载会暂时禁用WOW64 文件系统重定向[外部链接]当文件/目录是 这些部分访问。在其他地方,System32和{sys}映射到 32位系统目录,在32位进程中是正常的。
因此,在[Code]部分的64位模式下,一切都是32位。它将执行32位Java和c:\ Windows \ System32指向WOW64文件夹,即32位版本的System32。
这个答案显示了如何在注册表中检查Java:
Need help on Inno Setup script - issue in check the jre install
在回答之后,以下代码似乎可以检查是否安装了64位Java 1.7+:
[Code]
function JavaIsMissing(): Boolean;
var
javaVersionOutput: AnsiString;
begin
result := not RegQueryStringValue(HKLM64, 'Software\JavaSoft\Java Runtime Environment',
'CurrentVersion', javaVersionOutput);
if not result then
result := CompareStr(javaVersionOutput, '1.7') < 0;
end;
[Run]
Filename: "{tmp}\{#JavaInstaller}"; StatusMsg: "Java Runtime Enviroment not installed on your system. Installing..."; Check: JavaIsMissing
答案 1 :(得分:0)
我想要一些可以在多个 Inno Setup 项目中使用的东西,所以我编写了一个 DLL 来检测 Java 详细信息(主目录等):
https://github.com/Bill-Stewart/JavaInfo
从这里下载:https://github.com/Bill-Stewart/JavaInfo/releases
该下载包含一个示例 Inno Setup .iss
脚本,该脚本演示了如何使用 DLL 函数(包括如何检查 32 位还是 64 位)。