2011-11-06 117 views
3

在InnoSetup运行此代码:InnoSetup:检测如果Java是32位或64位

J32 := ShellExec('', 'java', '-d32 -version', '', SW_HIDE, ewWaitUntilTerminated, ec); 
J64 := ShellExec('', 'java', '-d64 -version', '', SW_HIDE, ewWaitUntilTerminated, ec); 

两个J32J64True

在命令行:

> 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); 

他们都返回Trueec = 1,尽管我有一个64位Java。

似乎ExecShellExec回报True因为他们成功运行java,但他们没有跟踪错误代码java回报。

+0

ShellExec从不等待该过程完成。然而,你的倒数第二个命令('Exec('java','-d32 -version'...')看起来很好,它在运行后会在'ec'中出现什么?'J32'中有什么? –

+1

Pascal脚本: ShellExec文档说:“Wait参数指定函数应该立即返回还是等待启动的进程已经定制或空闲,” – utapyngo

+0

'ec = 1'。当调用成功时,它始终为1 'J32 = True' – utapyngo

回答

1

的创新安装帮助状态:

http://www.jrsoftware.org/ishelp/index.php?topic=setup_architecturesinstallin64bitmode

由{SYS}返回的System32下路径在[DIRS]使用时恒定映射到默认64位 System目录[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