同様の質問がここで行われましたが、それは.NET 3.5に固有のものでした。具体的には、以下を探しています。
- インストールされている.NET Frameworkのバージョンとサービスパックを確認する正しい方法は何ですか?
- 使用できるレジストリキーのリストはありますか?
- フレームワークのバージョン間に依存関係はありますか?
同様の質問がここで行われましたが、それは.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
.NET 1.0を除き、値は数値(REG_SZ
)ではなく文字列(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 Setup \ NDP \ v1.1.4322 \ SP 2.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v2.0.50727 \ SP 3.0 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ SP 3.5 HKLM \ Software \ Microsoft \ NET Framework Setup \ 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の場合、これらのキーのいずれかの文字列値の形式は、#、#、####、#です。最後の#はService Packレベルです。
私はこれを明示的に要求しませんでしたが、フレームワークの正確なバージョン番号を知りたい場合は、次のレジストリキーを使用します。
フレームワークバージョンレジストリキー -------------------------------------------------- ---------------------------------------- 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 Setup \ 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がインストールされ、それ以外の場合はインストールされません。詳細はこちらとこちらをご覧ください。
次のナレッジベースの記事に、この質問に対する公式のMicrosoft回答があります。
文書番号:318785-最終更新日:2008年11月7日-リビジョン:20.1インストールされている.NET Frameworkのバージョンと、サービスパックが適用されているかどうかを確認する方法
残念ながら、2.0ディレクトリのmscorlib.dllバージョンには2.0バージョンがあり、3.5 SP1がインストールされていても3.0または3.5ディレクトリのいずれかにmscorlib.dllバージョンがないため、動作しないようです...理由公式のMicrosoftの回答はそれほど誤解されているでしょうか?
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);
}
}
}
}
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP", true)
しRegistry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP")
て、管理者以外のユーザーのセキュリティ例外を回避します。
システムにインストールされている.NETバージョン4.5.2の存在を検出したかったのですが、ASoft .NETバージョン検出器よりも優れた解決策はありませんでした。
異なる.NETバージョンを示すこのツールのスナップショット:
のサブキーを列挙しますHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
。各サブキーは.NETバージョンです。Install=1
マシンに存在する場合は値、サービスパックを示すSP値、およびMSI=1
MSIを使用してインストールされた場合は値が必要です。(たとえば、Windows Vistaの.NET 2.0はOSの一部であるため、最後のものはありません。)
64ビットOSの場合、パスは次のようになります。
HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
Wow6432Node
レジストリキーは、64ビットと32ビットのレジストリビュー間WOW64レジストリリフレクタ、ミラー特定のキーと値の一部です。レジストリが自動的にリダイレクトとミラーリングを処理するため、このキーに直接アクセスする必要はありません。
常に高い信頼性が証明されているASoft .NET Version Detectorの GUIツールがあります。コマンドラインでXML出力のファイル名を指定することにより、XMLファイルを作成できます。
これを自動化に使用できます。これは.NETに依存しない言語で書かれた小さなプログラムであり、インストールは必要ありません。
コンピューターにインストールされている.NET Frameworkのバージョンを確認する必要がありました。コントロールパネルに移動して[プログラムのアンインストール]オプションを選択するだけでした。その後、プログラムを名前順に並べ替えたところ、Microsoft .NET Framework 4 Client Profileが見つかりました。
インストールされている.NET Frameworkのバージョンを取得するPowerShellスクリプトは次のとおりです
function Get-KeyPropertyValue($key, $property)
{
if($key.Property -contains $property)
{
Get-ItemProperty $key.PSPath -name $property | select -expand $property
}
}
function Get-VersionName($key)
{
$name = Get-KeyPropertyValue $key Version
$sp = Get-KeyPropertyValue $key SP
$install = Get-KeyPropertyValue $key Install
if($sp)
{
"$($_.PSChildName) $name SP $sp"
}
else{
"$($_.PSChildName) $name"
}
}
function Get-FrameworkVersion{
dir "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\" |? {$_.PSChildName -like "v*"} |%{
if( $_.Property -contains "Version")
{
Get-VersionName $_
}
else{
$parent = $_
Get-ChildItem $_.PSPath |%{
$versionName = Get-VersionName $_
"$($parent.PSChildName) $versionName"
}
}
}
}
$v4Directory = "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
if(Test-Path $v4Directory)
{
$v4 = Get-Item $v4Directory
$version = Get-KeyPropertyValue $v4 Release
switch($version){
378389 {".NET Framework 4.5"; break;}
378675 {".NET Framework 4.5.1 installed with Windows 8.1 or Windows Server 2012 R2"; break;}
378758 {".NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2"; break;}
379893 {".NET Framework 4.5.2"; break;}
{ 393295, 393297 -contains $_} {".NET Framework 4.6"; break;}
{ 394254, 394271 -contains $_} {".NET Framework 4.6.1"; break;}
{ 394802, 394806 -contains $_} {".NET Framework 4.6.2"; break; }
}
}
方法:インストールされている.NET Frameworkのバージョンを確認する方法に基づいて記述されています。インストールされている.NET Frameworkのバージョンに関する情報を取得するには、Get-FrameworkVersion()関数を使用してください。
使用Signum.UtilitiesのからライブラリをSignumFramework(スタンドアロン使用することができます)、あなたはうまくそれを取得し、自分でレジストリを扱うことなく、することができます:
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ユーティリティを同じように試すこともできます。
cmd
私に与えられます ERROR: Description = Invalid namespace
。
ERROR: Description = Invalid namespace