OSのバージョンを取得する、OSの種類を判別するOSのバージョン情報はEnvironmentクラスのOSVersionプロパティにより取得できます。OSVersionプロパティで取得できるOperatingSystemオブジェクトのPlatformプロパティにより、OSのプラットフォーム(Windows 95系かNT系かなど)が分かります。さらに、OperatingSystemのVersionプロパティにより、OSのバージョンが分かります。 これらの情報により、OSの種類を判別する例を示します。すべての環境でテストしているわけではありませんので、正しく動作するか、ご報告をいただけると助かります。 '一部OSバージョンはそもそも.NET非対応のため、全くのナンセンスです 'プラットフォームの取得 Dim os As System.OperatingSystem = System.Environment.OSVersion Select Case os.Platform Case System.PlatformID.Win32Windows Console.WriteLine("OSは Windows 95 以降です。") If os.Version.Major >= 4 Then Select Case os.Version.Minor Case 0 Console.WriteLine("OSは Windows 95 です。") Exit Select Case 10 Console.WriteLine("OSは Windows 98 です。") Exit Select Case 90 Console.WriteLine("OSは Windows Me です。") Exit Select End Select End If Exit Select Case System.PlatformID.Win32NT Console.WriteLine("OSは Windows NT 以降です。") Select Case os.Version.Major Case 3 Select Case os.Version.Minor Case 0 Console.WriteLine("OSは Windows NT 3 です。") Exit Select Case 1 Console.WriteLine("OSは Windows NT 3.1 です。") Exit Select Case 5 Console.WriteLine("OSは Windows NT 3.5 です。") Exit Select Case 51 Console.WriteLine("OSは Windows NT 3.51 です。") Exit Select End Select Exit Select Case 4 If os.Version.Minor = 0 Then Console.WriteLine("OSは Windows NT 4.0 です。") End If Exit Select Case 5 Select Case os.Version.Minor Case 0 Console.WriteLine("OSは Windows 2000 です。") Exit Select Case 1 Console.WriteLine("OSは Windows XP です。") Exit Select Case 2 Console.WriteLine("OSは Windows Server 2003 です。") Exit Select End Select Exit Select Case 6 Select Case os.Version.Minor Case 0 Console.WriteLine("OSは Windows Vista") Console.WriteLine(" または Windows Server 2008 です。") Exit Select Case 1 Console.WriteLine("OSは Windows 7") Console.WriteLine(" または Windows Server 2008 R2 です。") Exit Select End Select Exit Select End Select Exit Select Case System.PlatformID.Win32S Console.WriteLine("OSは Win32s です。") Exit Select Case System.PlatformID.WinCE Console.WriteLine("OSは Windows CE です。") Exit Select Case System.PlatformID.Unix '.NET Framework 2.0以降 Console.WriteLine("OSは Unix です。") Exit Select Case System.PlatformID.Xbox '.NET Framework 3.5以降 Console.WriteLine("開発プラットフォームは Xbox 360 です。") Exit Select Case System.PlatformID.MacOSX '.NET Framework 3.5以降 Console.WriteLine("OSは Macintosh です。") Exit Select Case Else Console.WriteLine("(不明)") Exit Select End Select //一部OSバージョンはそもそも.NET非対応のため、全くのナンセンスです //プラットフォームの取得 System.OperatingSystem os = System.Environment.OSVersion; switch (os.Platform) { case System.PlatformID.Win32Windows: Console.WriteLine("OSは Windows 95 以降です。"); if (os.Version.Major >= 4) { switch (os.Version.Minor) { case 0: Console.WriteLine("OSは Windows 95 です。"); break; case 10: Console.WriteLine("OSは Windows 98 です。"); break; case 90: Console.WriteLine("OSは Windows Me です。"); break; } } break; case System.PlatformID.Win32NT: Console.WriteLine("OSは Windows NT 以降です。"); switch (os.Version.Major) { case 3: switch (os.Version.Minor) { case 0: Console.WriteLine("OSは Windows NT 3 です。"); break; case 1: Console.WriteLine("OSは Windows NT 3.1 です。"); break; case 5: Console.WriteLine("OSは Windows NT 3.5 です。"); break; case 51: Console.WriteLine("OSは Windows NT 3.51 です。"); break; } break; case 4: if (os.Version.Minor == 0) { Console.WriteLine("OSは Windows NT 4.0 です。"); } break; case 5: switch (os.Version.Minor) { case 0: Console.WriteLine("OSは Windows 2000 です。"); break; case 1: Console.WriteLine("OSは Windows XP です。"); break; case 2: Console.WriteLine("OSは Windows Server 2003 です。"); break; } break; case 6: switch (os.Version.Minor) { case 0: Console.WriteLine("OSは Windows Vista"); Console.WriteLine(" または Windows Server 2008 です。"); break; case 1: Console.WriteLine("OSは Windows 7"); Console.WriteLine(" または Windows Server 2008 R2 です。"); break; } break; } break; case System.PlatformID.Win32S: Console.WriteLine("OSは Win32s です。"); break; case System.PlatformID.WinCE: Console.WriteLine("OSは Windows CE です。"); break; case System.PlatformID.Unix: //.NET Framework 2.0以降 Console.WriteLine("OSは Unix です。"); break; case System.PlatformID.Xbox: //.NET Framework 3.5以降 Console.WriteLine("開発プラットフォームは Xbox 360 です。"); break; case System.PlatformID.MacOSX: //.NET Framework 3.5以降 Console.WriteLine("OSは Macintosh です。"); break; default: Console.WriteLine("(不明)"); break; } なおWindowsのバージョン一覧は、Wikipediaが参考になります。
補足:Windows XP互換モードでは、Environment.OSVersionと、後述するGetVersionExが別の値を返すことがあるという不具合が「互換モードでのSystem.Environment.クラスとWin32 APIの動作違い | Microsoft Connect」で報告されています。
サービスパックのバージョンを取得する.NET Framework 2.0以降で、OperatingSystem.ServicePackプロパティを使用する方法.NET Framework 2.0からは、OperatingSystem.ServicePackプロパティでサービスパックのバージョンを取得できます。OperatingSystem.VersionStringプロパティでもサービスパック情報の付いた文字列を取得できます。 'サービスパックの表示 Console.WriteLine(System.Environment.OSVersion.ServicePack) '例えば、"Service Pack 2"のように表示される Console.WriteLine(System.Environment.OSVersion.VersionString) 'Windows XP SP2では、次のように表示される '"Microsoft Windows NT 5.1.2600 Service Pack 2" //サービスパックの表示 Console.WriteLine(System.Environment.OSVersion.ServicePack); //例えば、"Service Pack 2"のように表示される Console.WriteLine(System.Environment.OSVersion.VersionString); //Windows XP SP2では、次のように表示される //"Microsoft Windows NT 5.1.2600 Service Pack 2" WMIを使用した方法WMIを使用してOSのバージョンやSPの情報を取得することができます。こちらでバージョンの取得法を簡単に説明しています。SPの情報は、Win32_OperatingSystemクラスのCSDVersionプロパティから取得できます。 下の例ではSystem.Management.dllを参照設定に追加する必要があります。 Dim mc As New System.Management.ManagementClass("Win32_OperatingSystem") Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances() Dim mo As System.Management.ManagementObject For Each mo In moc Console.WriteLine("SP:{0}", mo("CSDVersion")) mo.Dispose() Next moc.Dispose() mc.Dispose() '"SP:Service Pack 2"のように表示される
System.Management.ManagementClass mc =
new System.Management.ManagementClass("Win32_OperatingSystem");
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
Console.WriteLine("SP:{0}", mo["CSDVersion"]);
mo.Dispose();
}
moc.Dispose();
mc.Dispose();
//"SP:Service Pack 2"のように表示される
Win32 APIを使用した方法Win32 APIのGetVersionEx関数を使うことにより、SPの情報を取得することができます。これに関しては、マイクロソフトのサポート技術情報で紹介されています。
以下にその例を示します。
<System.Runtime.InteropServices.StructLayout( _
System.Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure OSVERSIONINFO
Public dwOSVersionInfoSize As Integer
Public dwMajorVersion As Integer
Public dwMinorVersion As Integer
Public dwBuildNumber As Integer
Public dwPlatformId As Integer
<System.Runtime.InteropServices.MarshalAs( _
System.Runtime.InteropServices.UnmanagedType.ByValTStr, _
SizeConst:=128)> _
Public szCSDVersion As String
End Structure
<System.Runtime.InteropServices.DllImport("kernel32")> _
Public Shared Function GetVersionEx(ByRef osvi As OSVERSIONINFO) As Boolean
End Function
'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button1.Click
Dim osvi As New OSVERSIONINFO()
osvi.dwOSVersionInfoSize = _
System.Runtime.InteropServices.Marshal.SizeOf(osvi)
GetVersionEx(osvi)
'サービスパックの表示
'"SP:Service Pack 2"のように表示される
Console.WriteLine(("SP:" + osvi.szCSDVersion))
End Sub
[System.Runtime.InteropServices.StructLayout(
System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct OSVERSIONINFO
{
public int dwOSVersionInfoSize;
public int dwMajorVersion;
public int dwMinorVersion;
public int dwBuildNumber;
public int dwPlatformId;
[System.Runtime.InteropServices.MarshalAs(
System.Runtime.InteropServices.UnmanagedType.ByValTStr,
SizeConst = 128)]
public string szCSDVersion;
}
[System.Runtime.InteropServices.DllImport("kernel32")]
public static extern bool GetVersionEx(ref OSVERSIONINFO osvi);
//Button1のClickイベントハンドラ
private void Button1_Click(object sender, EventArgs e)
{
OSVERSIONINFO osvi = new OSVERSIONINFO();
osvi.dwOSVersionInfoSize =
System.Runtime.InteropServices.Marshal.SizeOf(osvi);
GetVersionEx(ref osvi);
//サービスパックの表示
//"SP:Service Pack 2"のように表示される
Console.WriteLine("SP:" + osvi.szCSDVersion);
}
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。 |
|
Copyright(C) DOBON!. All rights reserved.
|