2011-03-19 34 views
4

使用代碼,如何確定在Windows中安裝Java VM(及其版本)。如何確定Java VM是否安裝在Windows上?

+1

Java代碼可以在沒有Java VM的情況下運行? – 2011-03-19 15:17:22

+0

也許OP意味着從批處理文件或其他語言檢測?請解釋。 – mellamokb 2011-03-19 15:20:22

+0

他沒有說代碼必須是Java。 – Ken 2011-03-19 15:32:46

回答

6

假設您希望從批處理文件中以編程方式確定此問題,可以使用安裝在windows\system32中的reg.exe工具。

關於這個工具令人討厭的事情是,沒有辦法讓它只返回一個退出代碼,所以你必須通過重定向壓制它的輸出到任何地方。當該值不存在時,它也會生成一條ERROR消息。

@echo off 
rem 
rem DetectJvmInstalled.cmd 
rem 
reg.exe query "HKLM\Software\JavaSoft\Java Runtime Environment" /v "CurrentVersion" > nul 2> nul 
if errorlevel 1 goto NotInstalled 

rem Retrieve installed version number. 
rem The reg.exe output parsing found at http://www.robvanderwoude.com/ntregistry.php 
set JvmVersion= 
for /F "tokens=3* delims= " %%A IN ('reg.exe query "HKLM\Software\JavaSoft\Java Runtime Environment" /v "CurrentVersion"') do set JvmVersion=%%A 
rem if "%JvmVersion%" == "" goto NotInstalled 

:Installed 
echo JVM Version = %JvmVersion% 
exit /b 0 

:NotInstalled 
echo JVM Not installed. 
exit /b 1 

注意事項:

  • 有兩種重定向到nul設備,一個用於標準輸出,另一個用於標準錯誤。
  • 檢測與值解析分開進行,以避免在值不存在時顯示ERROR...消息。
  • delims=選項後面有一個空格字符(因爲空格是分隔符)。
  • 批處理文件如果成功(安裝)或失敗時(未安裝)返回錯誤級別/退出代碼爲零。

希望它有幫助。

3

無法檢測是否從Java代碼安裝了JVM。如果沒有JVM存在,Java代碼就無法運行。因此,如果您能夠運行已編譯的代碼,則會安裝JVM。

+2

所以我們可以說'return true'總是正確的結果:-) – 2011-03-19 17:29:13

2

我不認爲在Windows上可以安裝的JVM可以是。我更關心的是檢查你的硬盤驅動器目錄中是否有JRE,以及是否可以通過參考PATH環境變量中的bin文件夾輕鬆訪問此JRE。

您可以通過嘗試從代碼運行java -version並收集輸出來檢查此問題。

如果您收到消息說明'java' is not recognized as an internal or external command, operable program or batch file.,那麼您的jre沒有被引用。

+1

雖然Microsoft Windows仍然支持PATH變量,但它更喜歡它的註冊表將程序文件名解析爲其完整路徑。所以只要檢查PATH變量的條目是不夠的。正如你所建議的那樣,運行「java -version」似乎是最可靠和最簡單的解決方案。 – 2011-03-19 15:44:59

5

我想也許你有興趣調用這些:

System.getProperty("os.name"); 
System.getProperty("java.version"); 
+2

不知道這是OP在找什麼,但這是我正在尋找的。謝謝。 – NeilMonday 2011-09-06 21:14:21

4

Oracle的deployJava.js不能只檢查一個Java特定的最低版本可在用戶的計算機上,但如果是在Windows上,引導他們通過下載並安裝它,如果需要的話。

通常deployJava.js用於使用Java Web Start & applets,您可以使用JWS形式鏈接到「裸」 Jar文件(不依賴)啓動的應用程序提供了啓動按鈕。

相關問題