【问题标题】:Get OS Information Correctly in Java or C#在 Java 或 C# 中正确获取操作系统信息
【发布时间】:2016-08-10 11:02:27
【问题描述】:

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

示例:Microsoft Windows 8.1 企业版

我在下面尝试过:

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

  2. 一种方法是从注册表中获取操作系统名称 从\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion获取“ProductName”

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

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

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

【问题讨论】:

  • 在 Java 中,不是真的,不是...除非某个地方的某个人开发了一个涵盖所有可能情况的本机库。
  • 我意识到这并没有好多少,但systeminfo /nh /fo csv 将始终(我认为)将操作系统名称输出为第二个逗号分隔值。至少它不依赖于特定于语言环境的标头。

标签: java operating-system registry


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    看看 apache commons lang library - OS_ARCH, OS_NAME, OS_VERSION 也许它会检索您需要的东西。以下是其 javadocs 的链接: https://commons.apache.org/proper/commons-lang/javadocs/api-2.4/org/apache/commons/lang/SystemUtils.html

    【讨论】:

    • 除了指向资源的链接之外,您还可以提供简短的注释吗 - 只是链接它不是 SO 样式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2016-04-18
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多