Получить версию ОС/дружественное имя в С#
В настоящее время я работаю над проектом С#. Я хочу собирать статистику пользователей для лучшего развития программного обеспечения. Я использую функцию Environment.OS
для С#, но только она показывает имя ОС как нечто вроде Microsoft Windows NT
Я хочу, чтобы иметь возможность извлекать, это фактическое известное имя ОС, например, Windows XP, Windows Vista or Windows 7
и т.д.
Возможно ли это?
Ответы
Ответ 1
Добавьте ссылку и используя инструкции для 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;
}
Ответ 2
Вы действительно должны стараться избегать WMI для локального использования. Это очень удобно, но вы платите за это с точки зрения производительности. Подумайте налог на лень!
Кашишский ответ о реестре не работает во всех системах. В приведенном ниже коде должен быть указан и пакет обновления:
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 "";
}
Ответ 3
Добавьте ссылку .NET в Microsoft.VisualBasic. Затем вызовите:
new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName
Из MSDN:
Это свойство возвращает подробную информацию об имени операционной системы, если на компьютере установлена инструментария управления Windows (WMI). В противном случае это свойство возвращает ту же строку, что и свойство My.Computer.Info.OSPlatform
, которое предоставляет менее подробную информацию, чем может предоставить WMI. Информация, которую может предоставить WMI.
Ответ 4
System.OperatingSystem osInfo = System.Environment.OSVersion;
Ответ 5
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"));
Я надеюсь, что вы найдете это полезное
Ответ 6
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;
}