[英]InnoSetup: Detect if Java is 32-bit or 64-bit
在 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);
它們都返回True
和ec = 1
,盡管我有一個 64 位 java.lang.
似乎Exec
和ShellExec
返回True
是因為它們成功運行java
,但它們沒有跟蹤java
返回的錯誤代碼。
Inno Setup 幫助說明:
http://www.jrsoftware.org/ishelp/index.php?topic=setup_architecturesinstallin64bitmode
在 [Dirs]、[Files]、[InstallDelete]、[Run]、[UninstallDelete] 和 [UninstallRun] 部分中使用時,{sys} 常量返回的 System32 路徑默認映射到 64 位系統目錄。 這是因為當這些部分訪問文件/目錄時,安裝/卸載會暫時禁用 WOW64 文件系統重定向 [外部鏈接]。 在其他地方,System32 和 {sys} 映射到 32 位系統目錄,這在 32 位進程中是正常的。
所以在 [Code] 部分的 64 位模式下,一切都是 32 位的。 它將執行 32 位 Java 並且 c:\\Windows\\System32 指向 WOW64 文件夾,即 System32 的 32 位版本。
此答案顯示了如何在注冊表中檢查 Java:
需要有關 Inno Setup 腳本的幫助 - 檢查 jre 安裝的問題
在該答案之后,以下代碼似乎可以檢查是否安裝了 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
我想要一些可以在多個 Inno Setup 項目中使用的東西,所以我編寫了一個 DLL 來檢測 Java 詳細信息(主目錄等):
https://github.com/Bill-Stewart/JavaInfo
從這里下載: https : //github.com/Bill-Stewart/JavaInfo/releases
下載包括一個示例 Inno Setup .iss
腳本,該腳本演示了如何使用 DLL 函數(包括如何檢查 32 位還是 64 位)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.