在InnoSetup運行此代碼:InnoSetup:檢測如果Java是32位或64位
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);
他們都返回True
和ec = 1
,儘管我有一個64位Java。
似乎Exec
和ShellExec
回報True
因爲他們成功運行java
,但他們沒有跟蹤錯誤代碼java
回報。
ShellExec從不等待該過程完成。然而,你的倒數第二個命令('Exec('java','-d32 -version'...')看起來很好,它在運行後會在'ec'中出現什麼?'J32'中有什麼? –
Pascal腳本: ShellExec文檔說:「Wait參數指定函數應該立即返回還是等待啓動的進程已經定製或空閒,」 – utapyngo
'ec = 1'。當調用成功時,它始終爲1 'J32 = True' – utapyngo