同様の質問がここで尋ねられましたが、.NET 3.5 に固有のものでした。具体的には、次のことを探しています。
- インストールされている .NET Framework のバージョンと Service Pack を確認する正しい方法は何ですか?
- 使用できるレジストリ キーのリストはありますか?
- フレームワークのバージョン間に依存関係はありますか?
同様の質問がここで尋ねられましたが、.NET 3.5 に固有のものでした。具体的には、次のことを探しています。
レジストリは、フレームワークの特定のバージョンがインストールされているかどうかを検出する公式の方法です。
必要なレジストリ キーは、探しているフレームワークのバージョンによって異なります。
フレームワーク バージョン レジストリ キー -------------------------------------------------- -------------------------------------------- 1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install 2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install 3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess 3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install 4.0 クライアント プロファイル HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install 4.0 フル プロファイル HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install
一般的にあなたが探しているもの:
"Install"=dword:00000001
REG_SZ
値が数値 ( ) ではなく文字列 ( ) である .NET 1.0 を除きますREG_DWORD
。
サービス パック レベルの決定は、同様のパターンに従います。
フレームワーク バージョン レジストリ キー -------------------------------------------------- -------------------------------------------- 1.0 HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 1.0[1] HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 1.1 HKLM\Software\Microsoft\NET Framework セットアップ\NDP\v1.1.4322\SP 2.0 HKLM\Software\Microsoft\NET Framework セットアップ\NDP\v2.0.50727\SP 3.0 HKLM\Software\Microsoft\NET Framework セットアップ\NDP\v3.0\SP 3.5 HKLM\Software\Microsoft\NET Framework セットアップ\NDP\v3.5\SP 4.0 クライアント プロファイル HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing 4.0 フル プロファイル HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing [1] Windows Media Center または Windows XP Tablet Edition
ご覧のとおり、Windows Media Center または Windows XP Tablet Edition を実行している場合、.NET 1.0 の SP レベルを決定すると変わります。ここでも、.NET 1.0 は文字列値を使用しますが、他のすべては DWORD を使用します。
.NET 1.0 の場合、これらのキーのいずれかの文字列値は、#、#、####、# の形式になります。最後の # はサービス パックのレベルです。
私はこれを明示的に求めていませんでしたが、Framework の正確なバージョン番号を知りたい場合は、次のレジストリ キーを使用します。
フレームワーク バージョン レジストリ キー -------------------------------------------------- -------------------------------------------- 1.0 HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 1.0[1] HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 1.1 HKLM\Software\Microsoft\NET Framework セットアップ\NDP\v1.1.4322 2.0[2] HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version 2.0[3] HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Increment 3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Version 3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Version 4.0 クライアント プロファイル HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 4.0 フル プロファイル HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version [1] Windows Media Center または Windows XP Tablet Edition [2] .NET 2.0 SP1 [3] .NET 2.0 オリジナル リリース (RTM)
ここでも、.NET 1.0 は文字列値を使用しますが、他のすべては DWORD を使用します。
.NET 1.0 の場合、これらのキーのいずれかの文字列値の形式は#,#,####,#
. 文字列の#,#,####
部分はフレームワークのバージョンです。
.NET 1.1 の場合、バージョン番号を表すレジストリ キー自体の名前を使用します。
最後に、依存関係を見ると、.NET 3.0 は .NET 2.0 に追加機能を追加するため、.NET 2.0 と .NET 3.0 の両方がインストール済みとして評価され、.NET 3.0 がインストールされていることを正しく示す必要があります。同様に、.NET 3.5 は .NET 2.0 および .NET 3.0 に追加機能を追加するため、.NET 2.0、.NET 3.0、および .NET 3. はすべて、.NET 3.5 がインストールされていることを正しく示すために、インストールされていると評価する必要があります。
.NET 4.0 は、CLR 2.0 と並行して実行できる新しいバージョンの CLR (CLR バージョン 4.0) をインストールします。
v4.5
.NET 4.5 がインストールされている場合、レジストリにキーはありません。代わりに、HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full
キーに という値が含まれているかどうかを確認する必要がありますRelease
。この値が存在する場合、.NET 4.5 がインストールされています。それ以外の場合はインストールされていません。詳細については、こちらとこちらをご覧ください。
この質問に対するマイクロソフトの公式回答は、次のナレッジ ベース記事にあります。
残念ながら、2.0 ディレクトリの mscorlib.dll バージョンには 2.0 バージョンがあり、3.5 SP1 がインストールされているにもかかわらず、3.0 または 3.5 ディレクトリのいずれにも mscorlib.dll バージョンがないため、動作していないようです...なぜ公式のマイクロソフトの回答はそれほど誤解されているでしょうか?
Framework 4 ベータ版は、別のレジストリ キーにインストールされます。
using System;
using System.Collections.ObjectModel;
using Microsoft.Win32;
class Program
{
static void Main(string[] args)
{
foreach(Version ver in InstalledDotNetVersions())
Console.WriteLine(ver);
Console.ReadKey();
}
public static Collection<Version> InstalledDotNetVersions()
{
Collection<Version> versions = new Collection<Version>();
RegistryKey NDPKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP");
if (NDPKey != null)
{
string[] subkeys = NDPKey.GetSubKeyNames();
foreach (string subkey in subkeys)
{
GetDotNetVersion(NDPKey.OpenSubKey(subkey), subkey, versions);
GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Client"), subkey, versions);
GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Full"), subkey, versions);
}
}
return versions;
}
private static void GetDotNetVersion(RegistryKey parentKey, string subVersionName, Collection<Version> versions)
{
if (parentKey != null)
{
string installed = Convert.ToString(parentKey.GetValue("Install"));
if (installed == "1")
{
string version = Convert.ToString(parentKey.GetValue("Version"));
if (string.IsNullOrEmpty(version))
{
if (subVersionName.StartsWith("v"))
version = subVersionName.Substring(1);
else
version = subVersionName;
}
Version ver = new Version(version);
if (!versions.Contains(ver))
versions.Add(ver);
}
}
}
}
システムにインストールされている .NET バージョン 4.5.2 の存在を検出したかったのですが、ASoft .NET Version Detectorよりも優れたソリューションが見つかりませんでした。
さまざまな .NET バージョンを示すこのツールのスナップショット:
のサブキーを列挙しますHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
。各サブキーは.NETバージョンです。マシン上に存在する場合はInstall=1
値、サービス パックを示す SP 値、およびMSI=1
MSI を使用してインストールされた場合は値が必要です。(たとえば、Windows Vista の .NET 2.0 には、OS の一部であるため、最後の 1 つがありません。)
64ビットOSの場合、パスは次のようになります。
HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
.NET 4.5.1 が利用可能になったので、レジストリ内の Release という名前のキーの実際の値を、その存在だけでなく確認する必要があります。378758 の値は、.NET Framework 4.5.1 がインストールされていることを意味します。ただし、こちらで説明されているように、この値は Windows 8.1 では 378675 です。
ASoft .NET Version Detectorという GUI ツールが利用可能で、これは常に高い信頼性が証明されています。コマンド ラインで XML 出力のファイル名を指定することにより、XML ファイルを作成できます。
これを自動化に使用できます。これは、.NET に依存しない言語で記述された小さなプログラムであり、インストールは必要ありません。
自分のコンピュータにインストールされている .NET フレームワークのバージョンを確認する必要があり、コントロール パネルに移動して [プログラムのアンインストール] オプションを選択するだけでした。その後、プログラムを名前順に並べ替えたところ、Microsoft .NET Framework 4 Client Profile が見つかりました。
SignumFrameworkのSignum.Utilitiesライブラリ(スタンドアロンで使用できます)を使用すると、レジストリを自分で処理しなくても、適切に取得できます。
AboutTools.FrameworkVersions().ToConsole();
//Writes in my machine:
//v2.0.50727 SP2
//v3.0 SP2
//v3.5 SP1
「方法: インストールされている .NET Framework のバージョンを確認する(MSDN) 」を参照してください。
MSDN は、バージョン 1 ~ 4 で機能すると思われる関数の例を 1 つ提案しています。記事によると、メソッドの出力は次のとおりです。
v2.0.50727 2.0.50727.4016 SP2
v3.0 3.0.30729.4037 SP2
v3.5 3.5.30729.01 SP1
v4
Client 4.0.30319
Full 4.0.30319
「バージョン 4.5 以降」の場合、別の機能があることに注意してください。
Windows 7 の場合 (Windows 8 でも動作するはずですが、テストしていません):
コマンドプロンプトに移動
コマンド プロンプトに移動する手順:
cmd で、このコマンドを入力します
wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version
これにより、最新バージョンの NET Framework がインストールされます。
同じためにRaymond.cc Utiltiesを試すこともできます。