不带内部版本 C# 的操作系统版本
本文关键字:版本 操作系统 内部 | 更新日期: 2023-09-27 18:37:25
如何在没有构建器编号的情况下获取操作系统版本?我尝试过:
Environment.OSVersion.Version
但是这个返回,例如 Windows 6.2.9200.0 中的"8",我只需要版本号 (6.2),没有生成器 (9200)。我还需要代码在所有操作系统中工作。
如果我使用:
Environment.OSVersion.Major + "." + Environment.OSVersion.Version.Minor
这将在所有操作系统中正常工作吗?
例子:
视窗 8 => 6.2
OSX => 10.5.8
提前感谢!
编辑:
问题是,我有一个 java 应用程序,它创建一个带有操作系统版本的文件(使用函数"system.getproperty(os.version)")作为正则表达式(如"^10''.5''.''d$")。
我需要使用 C# 应用程序将此文件与实际操作系统版本进行比较。所以我需要一个像java函数"system.getproperty(os.version)"一样工作的C#函数。(我无法更改 java 应用程序)。
Environment.OSVersion.Version
是 System.Version
类型的对象。
此对象具有以下方法重载:ToString(int)
,int
参数是要返回的字段数。
因此,您想要的是:
Environment.OSVersion.Version.ToString(2)
因为您需要前两个字段。
对于MacOS(即Environment.OSVersion.Platform == PlatformID.MacOSX
时),您可以使用ToString(3)
。您需要的确切逻辑取决于您。
更新:
您列出的方法不适用于两个偏离的操作系统。 您将需要两种不同的方法,这将要求Environment.OSVersion
正确初始化和分析这两种方法。
-
Environment.OSVersion.Version
-
Environment.OSVersion.Platform
这将是您的两种方法,但是,如果您执行以下操作:
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平台。 特别是Microsoft.Net Core在非基于Microsoft的系统上相对较新。
如果没有更多详细信息来说明为什么与友好名称相比,您尝试返回特定的内部版本号版本,我们将没有太大帮助。 但是,根据您的问题和意见。
- 正则表达式:你不需要这个,不知道为什么要用这个。
- Concat
.Major
and.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;
}
您能否澄清并添加有关目标的更多详细信息?