如何在没有构建者编号的情况下获得操作系统版本? 我尝试过:
Environment.OSVersion.Version
但这回归,例如" 6.2.9200.0"在Windows 8中,我只需要版本号(6.2),没有构建器(9200)。此外,我需要代码适用于所有操作系统。
如果我使用:
Environment.OSVersion.Major + "." + Environment.OSVersion.Version.Minor
这在所有操作系统中都能正常工作吗?
示例:
Windows 8 => 6.2
OSX => 10.5.8
提前致谢!
修改
问题是,我有一个java应用程序,它创建一个OS版本的文件(使用函数" system.getproperty(os.version)")作为正则表达式(像这样" ^ 10 \。 5 \ \ d $"。)
我需要使用C#app将此文件与实际操作系统版本进行比较。所以我需要一个C#函数,它的功能类似于java函数" system.getproperty(os.version)"。 (我无法更改java应用程序。)
答案 0 :(得分:3)
Environment.OSVersion.Version
是System.Version
类型的对象。
此对象具有以下方法重载:ToString(int)
,int
参数是要返回的字段数。
因此,你想要的是:
Environment.OSVersion.Version.ToString(2)
因为你需要前两个字段。
对于MacOS(即Environment.OSVersion.Platform == PlatformID.MacOSX
时),您可以使用ToString(3)
。你需要的确切逻辑取决于你。
答案 1 :(得分:0)
<强>更新强>
您列出的方法不与两个偏离的操作系统不一致。您需要两种不同的方法,这需要Environment.OSVersion
正确初始化并正确解析这两种方法。
Environment.OSVersion.Version
Environment.OSVersion.Platform
如果您执行following:
,那么这将是您的两种方法var os = Environment.OSVersion;
var pid = os.Platform;
对于Mac OS X,它将返回{6}的integer
。
你的另一种方法:
var os = Environment.OSVersion.Version.ToString(2);
这将正确解决您确定 Microsoft Windows版本的问题,但我不确定如何处理 Unix / Mac OS X 平台。特别是在相对 new 的情况下,Microsoft .Net Core在非基于Microsoft的系统上。
如果没有更详细的原因,为什么您尝试返回特定内部版本号与友好名称相比,我们将无法获得更多帮助。但是根据您的问题和意见。
.Major
和.Minor
:这也无效。 确定平台或应用程序运行平台的最常见方案:
var os = Environment.OSVersion;
var pid = os.Platform;
switch (pid)
{
case PlatformID.Win32NT:
case PlatformID.Win32S:
case PlatformID.Win32Windows:
case PlatformID.WinCE:
// Microsoft Windows
break;
case PlatformID.Unix:
// Unix
break;
case PlatformID.MacOSX:
// Macintosh
break;
default:
// Unidentified
break;
}
您能澄清并添加更多关于目标的详细信息吗?