アプリケーションのバージョンアップには、動作条件となる.NET Frameworkのバージョンアップも時に必要となります。.NET Frameworkのバージョン情報を確認するための情報をご報告です。
動機
アプリケーションによって.NET Frameworkをベースにしたコードが使われている場合、アプリケーションの動作要件に特定の.NET Frameworkのバージョンが要求されます。
依存するアプリケーションのバージョンアップに伴って.NET Frameworkのバージョンを確認する用事があったので確認方法をおさらい。ちなみに対象の環境はWindows10の64bit版を対象としています。
Ver.4.5以降のレジストリ確認箇所
.NET Framework 4.5以降のバージョンを確認するには、レジストリキーの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
にある
Release
キーを確認します。
Windows Updateで月例更新を適用していれば、.NET Framework 4.8へのアップデートが適用されているため、最新になっているはずです。
概ねDWORD値のこの値は「528040」を超える数値となっているようです。OSのバージョンと.NET Frameworkのバージョンの組み合わせによって数字が変化するようです。Windows10 21H2で確認したところ、
上図のように「528372」と表示されていました。よく見るとVersionの値に「4.8.04084」と記載があるので、調べるだけでいえばこの値でもいいのかも。
その他の(バージョンの)値は、
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
に記載があります。
「528040」以上の数字の場合には「.NET Framework 4.8」がインストールされていることになります。LTSCなどのOSでは「528049」となっています。
Ver.3.5のレジストリ確認箇所
.NET Framework 4.5以降はここまでで確認できましたが、旧システムの必要性から.NET Framework 3.5を使っているケースも一部あります。
Windows10で標準ではないのですが、旧システムの動作の都合上必要なのでこれも把握しておきたい場合、ここまでとは違うレジストリ箇所を確認する必要があります。
.NET Framework 3.5は
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5
を確認して、「Install」キーの値を確認します。
.NET Framework 3.5がインストールされていない環境では、
そもそもキーが存在しませんでした。
PowerShellで確認してみる
最近勉強しているのでPowerShellでバージョン確認をしてみます。
レジストリキーの該当箇所を画面表示するには、Get-Itemコマンドレットを使って画面表示できます。
Get-Item "Registry::HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
で、
このように、画面上で確認できました。
不勉強なので、Releaseの数値だけを取り出すのに失敗。
コマンドプロンプトで(バッチファイル用に)確認
そのうちバッチファイルで使うかもしれないので、コマンドプロンプトでも確認してみます。
コマンドラインは、
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
実行すると、レジストリキー内の情報が一覧表示されます。
ここからいつもやっているように、find(findstr)コマンドで抽出。
「Release」で抽出すると、バージョン情報は取得できるけど、16進数表記になってしまいます。(16進数"80ff4"は10進数で"528372")
それじゃあ「Version」で抽出してみると、"TargetVersion"というキーも含まれてしまうという。うーん。もうちょっとスマートにできないかなぁ。
追記:(2022/05/11)
コメントにも記載がありますが、Linuxのgrepのように抽出して除外すれば「Version」だけを表示させることができました。
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" | find "Version" | find /v "TargetVersion"
とfind×2をパイプで繋げると思っていたように表示できました。