WinForms应用程序的最佳方式是确定它正在运行哪个Windows操作系统?

我有一个WinForms应用程序需要以特定的方式运行(特别是对某个安装程序的shell),基于它运行的操作系统

我正在使用System.OperatingSystem类,并结合了PlatFormID,Major,Minor和Build数字,这些数字可以帮助您实现这一目标。

不幸的是,一个OperatinSystem对象的合法性,不允许你在一些平台之间进行精确的区分。 如Vista和Windows Server 2008,或Vista 32位和Vista 64位。 同样,XP 64位专业版似乎与Server 2003具有相同的版本信息。

那么是否可以从WinForms应用程序(使用c#)确切地确定您正在运行哪个Windows操作系统?

Solutions Collecting From Web of "WinForms应用程序的最佳方式是确定它正在运行哪个Windows操作系统?"

区分32位和64位的最简单方法是通过环境变量PROCESSOR_ARCHITECTURE

 string value = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); 

如果您在32位Windows上运行此代码,则value将为“x86”或为空。 在64位Windows上,我认为它将被设置为“x86”以外的任何内容。 有点乱,但到目前为止,它可以在所有版本的Windows上运行.NET程序。

您也可以使用更现代的WMI来查询几乎所有可以想象的操作系统信息,但这只能在Windows 2000或更新版本上使用。 如果你能忍受这一点, 检查这个博客文章的一些例子 。

您可以使用WMI来检索Win32_OperatingSystem管理类的信息。

使用WMI Code Creator生成的代码 :

 using System; using System.Management; using System.Windows.Forms; namespace WMISample { public class MyWMIQuery { public static void Main() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_OperatingSystem"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("-----------------------------------"); Console.WriteLine("Win32_OperatingSystem instance"); Console.WriteLine("-----------------------------------"); Console.WriteLine("BuildNumber: {0}", queryObj["BuildNumber"]); Console.WriteLine("Caption: {0}", queryObj["Caption"]); Console.WriteLine("OSArchitecture: {0}", queryObj["OSArchitecture"]); Console.WriteLine("OSLanguage: {0}", queryObj["OSLanguage"]); Console.WriteLine("Version: {0}", queryObj["Version"]); } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); } } } } 

这是我一年前为我公司的遗留应用程序做的事情…我不知道这是最新的方法,但它确实有效。

 If Environment.OSVersion.Platform = PlatformID.Win32NT Then If major <= 4 Then ret = "Windows NT 4.0" _usingNT4 = True ElseIf major > 6 Then ret = "Windows Vista" ElseIf major = 5 And minor = 0 Then ret = "Windows 2000" Else ret = "Windows XP" End If Else If major > 4 Or (major = 4 And minor >= 90) Then ret = "Windows ME" ElseIf (major = 4 And minor >= 10 And minor < 90) Then ret = "Windows 98" Else ret = "Windows 95" End If End If 

如果你真的需要所有的细节,我想你仍然可以使用Win32 API的古老的GetVersionEx

事实上,这不是.NET(严格来说),但可以在.NET应用程序中使用。 看到这里 。

这是一个更简单的方法:

 string os = Environment.OSVersion.VersionString; 

…对于我的操作系统,上面的返回如下:

Microsoft Windows NT 6.1.7600.0

希望这可以帮助。