C#确定操作系统是Windows 7或Windows Windows 2008

我使用的是.NET framework 3.5版本,该程序必须检测所有Windows版本(包括Windows XP,Windows Vista,Windows 7,Windows 8,Windows 10,Windows Server 2008,Windows Server 2008 R2,Windows Server 2012)。

问题是如何在以下情况下确定操作系统?

  • Windows Vista和Windows Server 2008版本号均为6.0。
  • Windows 7和Windows Server 2008 R2版本号均为6.1。
  • Windows 8和Windows Server 2012版本号均为6.2。

我找到了下面的代码,但我无法使用,因为我使用的是.NET Framework 3.5。

var name = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType() select x.GetPropertyValue("Caption")).FirstOrDefault(); return name != null ? name.ToString() : "Unknown"; 

我怎么解决这个问题?

我假设代码的问题是它使用LINQ。 你仍然可以使用WMI来检查它,只是不要使用LINQ。 我也认为最好检查ProductType而不是Caption

 using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")) { foreach (ManagementObject managementObject in searcher.Get()) { uint productType = (uint)managementObject.GetPropertyValue("ProductType"); // productType will be 1 for workstation, 2 for domain controller, // 3 for normal server } } 

然后只需检查版本号以确定实际的操作系统版本。

另一种方法是使用注册表并检查密钥HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductType 。 这将具有值WinNT,ServerNT或LanmanNT以标记与WMI代码相同的选项。

您可以直接从注册表文件中获取信息。 它完美地从.net 3.0及以上版本开始。

 String loc= @"SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion"; RegistryKey key = Registry.LocalMachine; RegistryKey skey = key.OpenSubKey(loc); Console.WriteLine("OS Name: {0}", skey.GetValue("ProductName"));