在Java或C#中正确获取操作系统信息



我想使用java或C#获得操作系统名称和版本,如下例所述:

示例:Microsoft Windows 8.1 Enterprise

我尝试过以下内容:

  1. 在java中尝试System.getProperty("os.name")=>它不提供操作系统版

  2. 一种方法是从注册表中获取操作系统名称从HKLMSOFTWAREMicrosoftWindows NTCurrentVersion 获取"ProductName"

  3. 我还尝试了SYSTEMINFO命令,它提供了操作系统名称。但是由于它显示不同的输出语言。无法从输出中检查变量名。

但我想找到一种除了从注册表中查找之外的方法,这样即使在未来版本的操作系统中,注册表路径发生变化,应用程序也应该提供正确的操作系统名称。

有没有其他可靠的方法可以找到带版本的操作系统名称?

查看apache commons lang库-OS_ARCH、OS_NAME、OS_VERSION也许它会检索到你需要的东西。以下是指向其javadocs的链接:https://commons.apache.org/proper/commons-lang/javadocs/api-2.4/org/apache/commons/lang/SystemUtils.html

最后我使用了下面的代码,因为我分析了注册表路径很可能不会更改。

    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] + " ";
        }

最新更新