没有内部版本号的OS版本C#

时间:2015-01-12 22:58:17

标签: c# operating-system

如何在没有构建者编号的情况下获得操作系统版本? 我尝试过:

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应用程序。)

2 个答案:

答案 0 :(得分:3)

Environment.OSVersion.VersionSystem.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的系统上。

如果没有更详细的原因,为什么您尝试返回特定内部版本号与友好名称相比,我们将无法获得更多帮助。但是根据您的问题和意见。

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

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