我目前正在开发一个C#项目。我想收集用户统计信息以更好地开发软件。我正在使用C#的Environment.OS
功能,但它只显示操作系统名称,如 Microsoft Windows NT
我希望能够检索是操作系统的实际已知名称,例如它是Windows XP, Windows Vista or Windows 7
等等。
这可能吗?
答案 0 :(得分:46)
为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;
}
答案 1 :(得分:12)
您应该尽量避免WMI供本地使用。这是非常方便的,但你在性能方面付出了巨大的代价。想懒惰税!
Kashish关于注册表的答案并不适用于所有系统。下面的代码应该也包括服务包: 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 "";
}
答案 2 :(得分:9)
向Microsoft.VisualBasic添加.NET引用。然后致电:
new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName
来自MSDN:
如果计算机上安装了Windows Management Instrumentation(WMI),则此属性将返回有关操作系统名称的详细信息。否则,此属性返回与
My.Computer.Info.OSPlatform
属性相同的字符串,该属性提供的信息比WMI提供的信息少,而不是WMI提供的信息。
答案 3 :(得分:4)
System.OperatingSystem osInfo = System.Environment.OSVersion;
答案 4 :(得分:4)
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"));
我希望你找到这个有用的
答案 5 :(得分:2)
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;
}