.net - ejemplo - system.diagnostics.process c# example
¿Cómo traducir los números de versión del sistema operativo MS Windows a nombres de productos en.NET? (5)
Hay un ejemplo de C ++ en msdn http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx , junto con una nota que alguien agregó sobre cómo envolverlo para usar en [VB]. red. Parece que el bit "faltante" que necesita es la función Win32 GetProductInfo ( referencia de PInvoke.net para esto ).
Entre esto y la respuesta de Avram, debería ser capaz de ensamblar la cadena de versión completa.
¿Cómo traducir los números de versión del sistema operativo MS Windows a nombres de productos?
Por ejemplo, en .NET las siguientes dos propiedades podrían usarse para determinar que el producto es MS Windows Vista Ultimate Edition:
Environment.OSVersion.Platform returns Win32NT
Environment.OSVersion.Version returns 6.0.6001.65536
Puede usar WMI para obtener el nombre amigable del producto ("Microsoft® Windows Server® 2008 Enterprise"):
using System.Management;
var name = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<ManagementObject>()
select x.GetPropertyValue("Caption")).First();
return name != null ? name.ToString() : "Unknown";
Si solo quieres un mensaje informativo amigable con la GUI, utilicé
My.Computer.Info.OSFullName & "(" + My.Computer.Info.OSVersion + ")"
Parece ser una prueba futura para futuras versiones de Windows
Esta es mi solución, la más rápida y sin casos seleccionados.
el resultado puede personalizarse como quieras
public static string SistemaOperativo
{
get
{
#region Dichiarazioni
var osInfo = Environment.OSVersion;
int platformID = (int)osInfo.Platform;
int versionM = osInfo.Version.Major;
int versionm = osInfo.Version.Minor;
string servicePack = osInfo.ServicePack;
#endregion
#region Spiegazione logica
/*
* IT:
* La chiave del dizionario è il risultato del concatenamento di
* PlatformID,MajorVersion,MinorVersion, tutto convertito in Int32,
* per esempio Platform ID=1 MajorVersion=4 MinorVersion=0,
* il risultato è 140 ossia Windows 95
*
* EN:
* The key in Dictionary is the ''join''
* of PlatformID,MajorVersion,MinorVersion, in int32,
* eg. Platform ID=1 MajorVersion=4 MinorVersion=0,
* the result is ''140'' (Windows 95)
*/
#endregion
Dictionary<int, string> sistemiOperativi = new Dictionary<int, string>(){
{0, "Windows 3.1"},
{140, "Windows 95"},
{1410, "Windows 98"},
{1490, "Windows ME"},
{2351, "Windows NT 3.51"},
{240, "Windows 4.0"},
{250, "Windows 2000"},
{251, "Windows XP"},
{252, "Windows 2003"},
{260, "Windows Vista/Server 2008"},
{261, "Windows 7"},
{-1, "Unknown"}
};
int idUnivoco = int.Parse(string.Format("{0}{1}{2}", platformID, versionM, versionm));
string outValue = "";
if (sistemiOperativi.TryGetValue(idUnivoco, out outValue))
return string.Format("{0}{1}", outValue, servicePack);
return sistemiOperativi[-1];
}
}
VB:
Public Function GetOSVersion() As String
Select Case Environment.OSVersion.Platform
Case PlatformID.Win32S
Return "Win 3.1"
Case PlatformID.Win32Windows
Select Case Environment.OSVersion.Version.Minor
Case 0
Return "Win95"
Case 10
Return "Win98"
Case 90
Return "WinME"
Case Else
Return "Unknown"
End Select
Case PlatformID.Win32NT
Select Case Environment.OSVersion.Version.Major
Case 3
Return "NT 3.51"
Case 4
Return "NT 4.0"
Case 5
Select Case _
Environment.OSVersion.Version.Minor
Case 0
Return "Win2000"
Case 1
Return "WinXP"
Case 2
Return "Win2003"
End Select
Case 6
Select Case _
Environment.OSVersion.Version.Minor
Case 0
Return "Vista/Win2008Server"
Case 1
Return "Win7/Win2008Server R2"
Case 2
Return "Win8/Win2012Server"
Case 3
Return "Win8.1/Win2012Server R2"
End Select
Case 10 //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used
Return "Windows 10"
Case Else
Return "Unknown"
End Select
Case PlatformID.WinCE
Return "Win CE"
End Select
End Function
public string GetOSVersion()
{
switch (Environment.OSVersion.Platform) {
case PlatformID.Win32S:
return "Win 3.1";
case PlatformID.Win32Windows:
switch (Environment.OSVersion.Version.Minor) {
case 0:
return "Win95";
case 10:
return "Win98";
case 90:
return "WinME";
}
break;
case PlatformID.Win32NT:
switch (Environment.OSVersion.Version.Major) {
case 3:
return "NT 3.51";
case 4:
return "NT 4.0";
case 5:
switch (Environment.OSVersion.Version.Minor) {
case 0:
return "Win2000";
case 1:
return "WinXP";
case 2:
return "Win2003";
}
break;
case 6:
switch(Environment.OSVersion.Version.Minor) {
case 0:
return "Vista/Win2008Server";
case 1:
return "Win7/Win2008Server R2";
case 2:
return "Win8/Win2012Server";
case 3:
return "Win8.1/Win2012Server R2";
}
break;
case 10: //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used
return "Windows 10";
}
break;
case PlatformID.WinCE:
return "Win CE";
}
return "Unknown";
}