Je travaille actuellement sur un projet C #. Je souhaite collecter des statistiques utilisateurs pour mieux développer le logiciel. J'utilise le Environment.OS
fonctionnalité de C # mais son seul affichage du nom du système d'exploitation est quelque chose comme Microsoft Windows NT
Ce que je veux pouvoir récupérer est le véritable nom connu de l'OS comme s'il s'agit de Windows XP, Windows Vista or Windows 7
et etc.
Est-ce possible?
Ajoutez une référence et utilisez des instructions pour System.Management
, puis:
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;
}
Vous devriez vraiment essayer d'éviter WMI pour une utilisation locale. C'est très pratique mais vous le payez cher en termes de performances. Pensez à la taxe sur la paresse!
La réponse de Kashish au sujet du registre ne fonctionne pas sur tous les systèmes. Le code ci-dessous devrait et comprend également le 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 "";
}
Ajoutez une référence .NET à Microsoft.VisualBasic. Appelez ensuite:
new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName
De MSDN :
Cette propriété renvoie des informations détaillées sur le nom du système d'exploitation si Windows Management Instrumentation (WMI) est installé sur l'ordinateur. Sinon, cette propriété renvoie la même chaîne que le
My.Computer.Info.OSPlatform
, qui fournit des informations moins détaillées que WMI ne peut fournir. Des informations que WMI peut fournir.
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"));
J'espère que tu trouves ca utile
System.OperatingSystem osInfo = System.Environment.OSVersion;
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;
}