不带内部版本 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 应用程序)。

不带内部版本 C# 的操作系统版本

Environment.OSVersion.VersionSystem.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;
}

您能否澄清并添加有关目标的更多详细信息?