我目前正在研究一个C#项目。 我想收集用户统计信息,以更好地开发软件。 我正在使用C#的Environment.OS
function,但它只显示操作系统的名称像微软Windows NT的东西
我想要能够检索到的是操作系统的实际已知名称,如Windows XP, Windows Vista or Windows 7
等。
这可能吗?
为System.Management
添加一个引用和使用语句,然后:
public static string GetOSFriendlyName() { string result = string.Empty; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem"); foreach (ManagementObject os in searcher.Get()) { result = os["Caption"].ToString(); break; } return result; }
你应该尽量避免使用WMI。 这是非常方便,但你在表现上付出沉重的代价。 想懒惰税!
Kashish关于注册表的回答不适用于所有系统。 下面的代码应该也包括Service Pack:
public string HKLM_GetString(string path, string key) { try { RegistryKey rk = Registry.LocalMachine.OpenSubKey(path); if (rk == null) return ""; return (string)rk.GetValue(key); } catch { return ""; } } public string FriendlyName() { string ProductName = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName"); string CSDVersion = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CSDVersion"); if (ProductName != "") { return (ProductName.StartsWith("Microsoft") ? "" : "Microsoft ") + ProductName + (CSDVersion != "" ? " " + CSDVersion : ""); } return ""; }
将.NET引用添加到Microsoft.VisualBasic。 然后打电话:
new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName
来自MSDN :
如果计算机上安装了Windows Management Instrumentation(WMI),此属性将返回有关操作系统名称的详细信息。 否则,此属性将返回与
My.Computer.Info.OSPlatform
属性相同的字符串,它提供的信息比WMI可提供的信息要少。
System.OperatingSystem osInfo = System.Environment.OSVersion;
String subKey = @"SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion"; RegistryKey key = Registry.LocalMachine; RegistryKey skey = key.OpenSubKey(subKey); Console.WriteLine("OS Name: {0}", skey.GetValue("ProductName"));
我希望你觉得这个有用
public int OStype() { int os = 0; IEnumerable<string> list64 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\SysWOW64")); IEnumerable<string> list32 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\System32")); if (list32.Count() > 0) { os = 32; if (list64.Count() > 0) os = 64; } return os; }