2016-04-18 47 views
2

我想用版使用Java OS的名稱或C#如下面的例子中提到的:獲取操作系統信息正確Java或C#

例子:微軟的Windows 8.1企業

我在下面嘗試:

  1. 在java中試圖System.getProperty("os.name") =>它不提供OS版

  2. 一種方法是從註冊表獲取操作系統名稱 獲取「產品名稱」\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

  3. 我也試過SYSTEMINFO命令,它提供了操作系統名稱。但是因爲它顯示輸出不同的語言。它不可能從輸出中檢查變量名稱。

但我想找到比從註冊表中找到其他的方式,這樣即使在OS的未來版本,註冊表路徑的變化,應用程序應提供正確的操作系統的名稱。

是否有任何其他可靠的方式找到操作系統名稱與版本?

+1

在Java中,不是真的,沒有......除非有人在某個地方開發了涵蓋每種可能情況的本地庫。 – fge

+0

我意識到這並不好,但是'systeminfo/nh/fo csv'將總是(我認爲)輸出操作系統名稱作爲第二個逗號分隔值。至少它不依賴於特定於語言環境的頭文件。 – VGR

回答

0

最後我用下面的代碼,因爲我分析了最有可能的註冊表路徑不會被改變。

private final String STR_OS_NAME_REGISTRY_QUERY = "reg query \"HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\" /v \"ProductName\"";  

    // Get OS name 
     objProcessName = Runtime.getRuntime().exec(STR_OS_NAME_REGISTRY_QUERY); 
     objProcessName.waitFor(); 
     objBufferReader = new BufferedReader(new InputStreamReader(objProcessName.getInputStream())); 
     lstJavaInfo = new ArrayList<>(); 

     while ((sLine = objBufferReader.readLine()) != null) 
     { 
      lstJavaInfo.add(sLine); 
     } 
     objProcessName.waitFor(); 

     if(lstJavaInfo.size() < 3) 
     { 
      return "-"; 
     } 

     String[] sarr = lstJavaInfo.get(2).split("\\s+"); 
     for(int nIndex = 3 ; nIndex < sarr.length ; nIndex++) 
     { 
      sOSArchitecture = sOSArchitecture + sarr[nIndex] + " "; 
     } 
1

看看apache commons lang庫 - OS_ARCH,OS_NAME,OS_VERSION 也許它會檢索你需要的東西。下面是它的javadocs的鏈接: ​​

+1

除了鏈接資源,你還可以提供簡短的註釋什麼 - 只是鏈接它不是SO風格 –