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

时间:2016-04-18 15:39:07

标签: java operating-system registry

我希望使用java或C#获取操作系统名称,如下例所示:

示例:Microsoft Windows 8.1 Enterprise

我在下面尝试过:

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

  2. 一种方法是从注册表中获取操作系统名称 获取"产品名称"来自\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

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

  4. 但我希望找到一种方法,而不是从注册表中找到,这样即使在未来版本的操作系统中,注册表路径发生了变化,App也应提供正确的操作系统名称。

    有没有其他可靠的方法来查找版本的操作系统名称?

2 个答案:

答案 0 :(得分:1)

查看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

答案 1 :(得分: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] + " ";
        }