在Java或C#中正确获取OS信息
Get OS Information Correctly in Java or C#
我想使用 java 或 C# 获取 OS 名称和版本,如下例所示:
示例:Microsoft Windows 8.1 企业版
我试过以下:
在java中试过System.getProperty("os.name")
=> 它不提供OS版本
一种方法是从注册表中获取 OS 名称
从 \HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
获取 "ProductName"
我也试过SYSTEMINFO命令,它提供了OS名称。但因为它显示输出不同的语言。无法从输出中检查变量名称。
但我想找到一种方法,而不是从注册表中查找,这样即使在 OS 的未来版本中,注册表路径发生变化,应用程序也应该提供正确的 OS 名称。
是否有任何其他可靠的方法来查找 OS 名称和版本?
查看 apache 公共语言库 - OS_ARCH、OS_NAME、OS_VERSION
也许它会检索你需要的东西。下面是它的 javadocs 的 link:
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] + " ";
}
我想使用 java 或 C# 获取 OS 名称和版本,如下例所示:
示例:Microsoft Windows 8.1 企业版
我试过以下:
在java中试过
System.getProperty("os.name")
=> 它不提供OS版本一种方法是从注册表中获取 OS 名称 从
\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
获取 "ProductName"
我也试过SYSTEMINFO命令,它提供了OS名称。但因为它显示输出不同的语言。无法从输出中检查变量名称。
但我想找到一种方法,而不是从注册表中查找,这样即使在 OS 的未来版本中,注册表路径发生变化,应用程序也应该提供正确的 OS 名称。
是否有任何其他可靠的方法来查找 OS 名称和版本?
查看 apache 公共语言库 - OS_ARCH、OS_NAME、OS_VERSION 也许它会检索你需要的东西。下面是它的 javadocs 的 link: 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] + " ";
}