.NET TIPS Windows OSの種類やバージョンを判別するには?デジタルアドバンテージ2004/04/16 |
|
|
ある特定バージョンのWindowsに特有な機能(例えばWindows XPのCD書き込み機能など)をアプリケーションから利用したい場合、プログラムではまずWindows OSのバージョンを取得し、そのバージョンごとに処理を分岐させる必要がある。そのようなときは、OperatingSystemクラス(System名前空間)を使うとWindows OSのバージョンを簡単に判別できる。
Windows OSの種類を判別するには?
OperatingSystemクラスを使ってWindows OSを判別するには、まずEnvironmentクラス(System名前空間)のOSVersionプロパティからOperatingSystemオブジェクトを取得する。このオブジェクトのPlatformプロパティ、Version.Majorプロパティ、Version.Minorプロパティの値の組み合わせからOSを特定することができる。なお、PlatformプロパティはPlatformID列挙体(System名前空間)で定義された値で、Version.MajorプロパティとVersion.Minorプロパティは整数値である。
この3つのプロパティの値の組み合わせとWindows OSの対応関係を次の表にまとめた。
Platformプロパティ |
PlatformID.Win32Windows
|
PlatformID.Win32NT
|
|||||
Version.Majorプロパティ |
4
|
4
|
5
|
||||
Version.Minorプロパティ |
0
|
10
|
90
|
0
|
0
|
1
|
2
|
Windows |
95※
|
98
|
Me
|
NT 4.0
|
2000
|
XP
|
2003
|
Windows OSの判別表 | |||||||
ここに挙げているものが、すべての組み合わせではない。より詳しくはリファレンス・マニュアルを参照していただきたい。 | |||||||
※.NET Framework は、Windows 95上では動作しないので実際にはこの組み合わせはあり得ない。 |
これらの組み合わせを使ってWindows OSの種類を判別するサンプル・プログラムを次に示す。
|
|
Windows OSの種類を取得するサンプル・コード(C#) | |
サンプル・プログラム(C#:winver1.cs)のダウンロード
|
|
|
Windows OSの種類を取得するサンプル・コード(VB.NET) | |
サンプル・プログラム(VB.NET:winver1.vb)のダウンロード
|
筆者の環境(Windows XP SP1)でこれをコマンド・プロンプトから実行すると、
Windows XP (Platform Win32NT Version 5.1 Build 2600)
と出力された。
より詳しくWindows OSのバージョンを調べるには?
以上の方法を使えば、おおよそのWindows OSの種類を取得できるので、多くの場合はこれで事足りるだろう。しかし、これよりもっと詳しいバージョン情報を取得したい場合もあるだろう。例えば、Windows XP Home EditionとWindows XP Professionalでアプリケーションの動作を切り替えたい場合では、Windows XPであることを判別するだけでは不十分だ。
より詳しいWindows OSのバージョンを取得するには、Win32 APIのGetVersionEx関数を使う必要がある。GetVersionEx関数を使えば、Windows XP Home EditionとProfessionalの違いだけでなく、Windows NT 4.0 Professional/Serverの違い、Windows 2000 Professional/Server/Advanced Serverの違い、Windows Server 2003, Standard Edition/Enterprise Edition/Web Editionの違い、Windows 98/Windows 98 Second Editionの違い*1、適用されているサービスパックの種類などを判別できるようになる。
*1 マイクロソフトのサポート技術情報では、OperatingSystemオブジェクトのVersion.Revisionプロパティの値を文字列に変換して“2222A”と比較し、これを判別しているが、Version.Revisionプロパティは整数型であり、この方法は明らかに間違いである。 |
そのサンプル・プログラムのダウンロードは以下のとおりだ。
■詳細なWindows OSのバージョンを取得するサンプル・プログラム
- サンプル・プログラム(C#:winver2.cs)のダウンロード
- サンプル・プログラム(VB.NET:winver2.vb)のダウンロード
なお、Windows NT 4.0のService Pack 6(SP6)より前のバージョンでは、GetVersionEx関数では取得できない情報があるので、それについてはレジストリから直接、取得している。
筆者の環境でコマンド・プロンプからこのサンプル・プログラムを実行すると、
Windows XP Professional (Platform Win32NT Version 5.1 Build 2600) Service Pack 1
カテゴリ:クラス・ライブラリ 処理対象:Windows環境 使用ライブラリ:OperatingSystemクラス(System名前空間) 使用ライブラリ:Environmentクラス(System名前空間) 使用ライブラリ:PlatformID列挙体(System名前空間) |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|