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"));
- 这个示例线程是否安全?
- Visual Studio 2015 Debug在multithreading应用程序中不起作用
- C#vs Python参数传递
- 必须将带有’LinkButton’类型的控件xxx放在带有runat = server的表单标签内
- 简单注入器:使用ILoggerFactory.CreateLogger注册ILogger ()
- 无法在C#中反序列化JSON结果。 输入字符串格式错误不正确
- Linq选择Item,它在另一个表中等于ID
- 在ScrollViewer.ComputedVerticalScrollBarVisibility更改上调整listview列的大小
- 如何在c#.net中创建来电显示