C# で実行している環境の情報を表示する
◆ OS のバージョン・エディション
◆ OS のリリース・ビルド
◆ OS とプロセスの bit 数
◆ .NET Framework のバージョン
◆ コンピュータ名
◆ OS のリリース・ビルド
◆ OS とプロセスの bit 数
◆ .NET Framework のバージョン
◆ コンピュータ名
OS とか Framework のバージョンなど実行してる環境の情報をいろいろ見たかったので作ってみました
このクラスをコピペして 欲しい情報を参照します
とりあえず全部表示してみます
[Windows10]
[ちょっと前の Windows10]
[Windows 7]
os_version にはちょっとわかりづらい NT 6.1 とか NT 6.2 とかそういう情報が入ってます
Windows の通算番号みたいなのですね
os_product_name にはわかりやすい OS のバージョンとエディションが入ってます
os_release と os_build は Windows 10 のバージョンを調べる用のデータです
Windows7 だと os_release の方のデータは取れませんでした
「Windows 10 1709」みたいな呼び方はたまに見かけると思います
os_bit は OS が 64 bit と 32 bit のどっちで動いてるかです
process_bit はこのアプリのプロセスが 64 bit と 32 bit のどちらかです
AnyCPU でビルドしたときに実際どっちなのかを知りたいときに使えます
framework_version が .NET Framework のバージョンです
4.0 以降はずっと 4.0.xxxxx 形式で
4.5 ~ → 4.0.30319.18010
4.6 ~ → 4.0.30319.42000
となっています
詳細なバージョンがわからないのでこの値での判断は非推奨とされています
registry_framework_version はもう少し詳しい .NET Framework のバージョンです
4.5 系 → 4.5.xxxxx
4.6 系 → 4.6.xxxxx
4.7 系 → 4.7.xxxxx
となっています
マイナーバージョンはわからないです
registry_framework_release は一番詳しい .NET Framework のバージョンです
各バージョンのリリース値です
Windows の OS バージョンの違いで同じ Framework バージョンでも異なるリリースバージョンになっています
host_name と machine_name はホスト名 (コンピュータ名) です
FQDN を取れるという情報も見たのですが サフィックスをつけてみてもどちらも コンピュータ名で フルコンピュータ名は取れませんでした
違いは host_name は設定したままの文字列で machine_name だとすべて大文字になるところです
参考
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/mitigation-product-versioning
このクラスをコピペして 欲しい情報を参照します
public class EnvInfo
{
private static string getRegistryValue(string keyname, string valuename)
=> Registry.GetValue(keyname, valuename, "").ToString();
public static string os_version { get; }
= Environment.OSVersion.VersionString;
public static string os_product_name { get; }
= getRegistryValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName");
public static string os_release { get; }
= getRegistryValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ReleaseId");
public static string os_build { get; }
= getRegistryValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuild");
public static string os_bit { get; }
= Environment.Is64BitOperatingSystem ? "64 bit" : "32 bit";
public static string process_bit { get; }
= Environment.Is64BitProcess ? "64 bit" : "32 bit";
public static string framework_version { get; }
= Environment.Version.ToString();
public static string registry_framework_version { get; }
= getRegistryValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full", "Version");
public static string registry_framework_release { get; }
= getRegistryValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full", "Release");
public static string host_name { get; }
= Dns.GetHostName();
public static string machine_name { get; }
= Environment.MachineName;
}
とりあえず全部表示してみます
foreach(var prop in typeof(EnvInfo).GetProperties())
{
Console.WriteLine(prop.Name + ": " + prop.GetValue(null));
}
[Windows10]
os_version: Microsoft Windows NT 6.2.9200.0
os_product_name: Windows 10 Pro
os_release: 1709
os_build: 16299
os_bit: 64 bit
process_bit: 64 bit
framework_version: 4.0.30319.42000
registry_framework_version: 4.7.02556
registry_framework_release: 461308
host_name: DESKTOP
machine_name: DESKTOP
[ちょっと前の Windows10]
os_version: Microsoft Windows NT 6.2.9200.0
os_product_name: Windows 10 Home
os_release: 1511
os_build: 10586
os_bit: 64 bit
process_bit: 64 bit
framework_version: 4.0.30319.42000
registry_framework_version: 4.6.01038
registry_framework_release: 394254
host_name: DESKTOP-F67Vaw
machine_name: DESKTOP-F67VAW
[Windows 7]
os_version: Microsoft Windows NT 6.1.7601 Service Pack 1
os_product_name: Windows 7 Professional
os_release:
os_build: 7601
os_bit: 64 bit
process_bit: 64 bit
framework_version: 4.0.30319.42000
registry_framework_version: 4.7.02558
registry_framework_release: 461310
host_name: NOTE
machine_name: NOTE
os_version にはちょっとわかりづらい NT 6.1 とか NT 6.2 とかそういう情報が入ってます
Windows の通算番号みたいなのですね
os_product_name にはわかりやすい OS のバージョンとエディションが入ってます
os_release と os_build は Windows 10 のバージョンを調べる用のデータです
Windows7 だと os_release の方のデータは取れませんでした
「Windows 10 1709」みたいな呼び方はたまに見かけると思います
os_bit は OS が 64 bit と 32 bit のどっちで動いてるかです
process_bit はこのアプリのプロセスが 64 bit と 32 bit のどちらかです
AnyCPU でビルドしたときに実際どっちなのかを知りたいときに使えます
framework_version が .NET Framework のバージョンです
4.0 以降はずっと 4.0.xxxxx 形式で
4.5 ~ → 4.0.30319.18010
4.6 ~ → 4.0.30319.42000
となっています
詳細なバージョンがわからないのでこの値での判断は非推奨とされています
registry_framework_version はもう少し詳しい .NET Framework のバージョンです
4.5 系 → 4.5.xxxxx
4.6 系 → 4.6.xxxxx
4.7 系 → 4.7.xxxxx
となっています
マイナーバージョンはわからないです
registry_framework_release は一番詳しい .NET Framework のバージョンです
各バージョンのリリース値です
Windows の OS バージョンの違いで同じ Framework バージョンでも異なるリリースバージョンになっています
.NET Framework version | release |
---|---|
.NET Framework 4.5 | 378389 |
.NET Framework 4.5.1 (Windows 8.1、または Windows Server 2012 R2) | 378675 |
.NET Framework 4.5.1 (Windows 8、Windows 7 SP1、または Windows Vista SP2) | 378758 |
.NET Framework 4.5.2 | 379893 |
.NET Framework 4.6 (Windows 10) | 393295 |
.NET Framework 4.6 (Windows 10 以外) | 393297 |
.NET Framework 4.6.1 (Windows 10 (11 月更新版)) | 394254 |
.NET Framework 4.6.1 (Windows 10 (11 月更新版) 以外) | 394271 |
.NET Framework 4.6.2 (Windows 10 Anniversary Update) | 394802 |
.NET Framework 4.6.2 (Windows 10 Anniversary Update 以外) | 394806 |
.NET Framework 4.7 (Windows 10 Creators Update) | 460798 |
.NET Framework 4.7 (Windows 10 Creators Update 以外) | 460805 |
.NET Framework 4.7 (Windows 10 Fall Creators Update) | 461308 |
.NET Framework 4.7 (Windows 10 Fall Creators Update 以外) | 461310 |
host_name と machine_name はホスト名 (コンピュータ名) です
FQDN を取れるという情報も見たのですが サフィックスをつけてみてもどちらも コンピュータ名で フルコンピュータ名は取れませんでした
違いは host_name は設定したままの文字列で machine_name だとすべて大文字になるところです
参考
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/mitigation-product-versioning