【问题标题】:OS Version without build number C# [closed]没有内部版本号 C# 的操作系统版本 [关闭]
【发布时间】:2015-01-12 22:58:16
【问题描述】:

如何在没有制造商编号的情况下获取操作系统版本? 我试过了:

Environment.OSVersion.Version

但是这个返回,例如 Windows 8 中的“6.2.9200.0”,我只需要版本号(6.2),没有构建器(9200)。我还需要代码在所有操作系统中都能正常工作。

如果我使用:

Environment.OSVersion.Major + "." + Environment.OSVersion.Version.Minor

这在所有操作系统中都可以正常工作吗?

示例:
Windows 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.Major + "." + Environment.OSVersion.Version.Minor你肯定不会得到10.5.8
  • 但在 OSX 版本 10.5.8 中,10 是主要的,而 5.8 不是次要的?
  • Version.Minor 是 int 属性。无法将 5.8 存储在 int 属性中。
  • 啊,你是对的,谢谢。

标签: c# operating-system


【解决方案1】:

Environment.OSVersion.Version 是 System.Version 类型的对象。

此对象具有以下方法重载:ToString(int),int 参数是要返回的字段数。

因此,你想要的是:

Environment.OSVersion.Version.ToString(2)

因为您需要前两个字段。

对于 MacOS(即Environment.OSVersion.Platform == PlatformID.MacOSX)可以使用ToString(3)。您需要的确切逻辑由您决定。

【讨论】:

  • 在 OSX 上不会返回 10.5.8
  • @Marcin 是的,我在写完答案后意识到了这一点,我为 OS X 添加了一个特殊情况。
  • 谢谢。我有这样的操作系统版本 "^10\\.5\\.\\d$" 我使用这个: Regex.IsMatch(Environment.OSVersion.Version, "^10\\.5\\.\\d $", RegexOptions.IgnorePatternWhitespace);将实际操作系统版本与操作系统版本“^10\\.5\\.\\d$”进行比较。如果版本使用正则表达式相等,我如何更改此方法以使其变为真?示例:这个:"^6\\.\\d$" == 6.2.9200.0 ?返回真;
  • 我不知道你想做什么,但我知道你肯定不需要任何正则表达式来完成这个任务,因为Version 已经是一个完全解析的结构您可以要求的所有属性。
  • 我使用的文件已经将操作系统版本作为正则表达式,我需要将实际操作系统版本与文件中的操作系统版本进行比较,是正则表达式为什么有表示数字(0 -9) 和其他表达式...
【解决方案2】:

更新:


您列出的方法不会与两个不同的操作系统不一致。您将需要两种不同的方法,这需要Environment.OSVersion 正确初始化和正确解析这两种方法。

  • Environment.OSVersion.Version
  • Environment.OSVersion.Platform

这将是您的两种方法,但是如果您执行following:

var os = Environment.OSVersion;
var pid = os.Platform;

对于 Mac OS X,它将返回一个 integer 后面的六个。

您的其他方法:

var os = Environment.OSVersion.Version.ToString(2);

这将正确地解决您确定Microsoft Windows 版本 的问题,但是我不确定它将如何处理Unix / Mac OS X 平台。尤其是 Microsoft .Net Core 在非基于 Microsoft 的系统上相对新。

如果没有更多详细信息说明您为什么尝试返回特定版本号版本而不是友好名称,我们将不会有太大帮助。但是,根据您的问题和 cmets。

  • 正则表达式:你不需要这个,不知道你为什么要使用这个。
  • Concat .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;
}

您能否澄清并添加更多关于您的目标的细节?

【讨论】:

  • 谢谢,但在 OSX 中,版本分为三个部分(即:10.5.8)
  • 问题是,我有一个 java 应用程序,它创建一个具有操作系统版本的文件(使用函数“system.getproperty(os.version)”),我需要将此文件与实际的操作系统版本进行比较一个 C# 应用程序。所以我需要一个像java函数“system.getproperty(os.version)”一样工作的C#函数。 (我无法更改 java 应用程序)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2012-02-05
  • 2017-04-22
  • 1970-01-01
  • 2011-03-27
  • 2012-02-05
相关资源
最近更新 更多