webdevqa.jp.net

どの.NET FrameworkのバージョンとService Packがインストールされているかをどのように検出できますか?

同様の質問が こちら されていましたが、それは.NET 3.5特有のものでした。具体的には、私は以下を探しています:

  1. どの.NET FrameworkのバージョンとService Packがインストールされているかを判断するための正しい方法は何ですか?
  2. 使用できるレジストリキーの一覧はありますか?
  3. Frameworkのバージョン間に依存関係はありますか?
286
Scott Dorman

レジストリは 正式な方法 で、Frameworkの特定のバージョンがインストールされているかどうかを検出します。

enter image description here

どのレジストリキーが必要かは、探しているFrameworkのバージョンによって異なります。

フレームワークバージョンレジストリキー
 ------------------------------------ -------------------------------------------------- ---- 
 1.0 HKLM¥Software¥Microsoft¥.NETFramework¥Policy¥v1.0¥3705 
 1.1 HKLM¥Software¥Microsoft¥NET Framework Setup¥NDP¥v1.1.4322¥インストール[ 2.0 HKLM¥Software¥Microsoft¥NET Framework Setup¥NDP¥v2.0.50727¥インストール
 3.0 HKLM¥Software¥Microsoft¥NET Framework Setup¥NDP¥v3.0¥Setup¥InstallSuccess 
 ] 3.5 HKLM¥Software¥Microsoft¥NET Frameworkのセットアップ¥NDP¥v3.5¥Install 
 4.0クライアントプロファイルHKLM¥Software¥Microsoft¥NET Frameworkのセットアップ¥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 \ソフトウェア\ Microsoft \アクティブセットアップ\インストールされているコンポーネント\ {78705f0d-e8db-4b2d-8193-982bdda15ecd} \バージョン
 1.0 [1] HKLM\Software\Microsoft \アクティブセットアップ\インストールされているコンポーネント\ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \バージョン
 1.1 HKLM \ソフトウェア\ 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 \ソフトウェア\ Microsoft\NET Frameworkのセットアップ\ NDP\v4 \クライアント\サービス
 4.0フルプロファイルHKLM \ソフトウェア\ Microsoft\NET Frameworkのセットアップ\ NDP\v4\Full\Servicing 
 
 [1] Windows Media CenterまたはWindows XP Tablet Ed ition 

ご覧のとおり、Windows Media CenterまたはWindows SP Tablet Editionを実行している場合は、.NET 1.0のXPレベルの決定が変わります。繰り返しますが、.NET 1.0では文字列値が使用され、その他のすべてではDWORDが使用されています。

.NET 1.0の場合、これらのキーのいずれかの文字列値の形式は#、#、####、#です。最後の#はService Packのレベルです。

私は明示的にこれを要求しませんでしたが、あなたがフレームワークの正確なバージョン番号を知りたいなら、あなたはこれらのレジストリキーを使うでしょう:

フレームワークバージョンレジストリキー
 ------------------------------------ -------------------------------------------------- ---- 
 1.0 HKLM \ソフトウェア\ Microsoft \アクティブセットアップ\インストールされているコンポーネント\ {78705f0d-e8db-4b2d-8193-982bdda15ecd} \バージョン
 1.0 [1] HKLM\Software\Microsoft \アクティブセットアップ\インストールされているコンポーネント\ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \バージョン
 1.1 HKLM \ソフトウェア\ Microsoft\NET Frameworkセットアップ\ NDP\v1.1.4322 
 2.0 [2] HKLM\Software\Microsoft\NET Frameworkのセットアップ\ NDP\v2.0.50727 \バージョン
 2.0 [3] HKLM\Software\Microsoft\NET Frameworkのセットアップ\ NDP\v2.0.50727\Increment 
 3.0 HKLM\Software\Microsoft\NET Frameworkのセットアップ\ NDP\v3.0 \バージョン
 3.5 HKLM\Software\Microsoft\NET Frameworkのセットアップ\ NDP\v3.5\Version 
 4.0クライアントプロファイルHKLM\Software\Microsoft\NET Frameworkのセットアップ\ NDP\v4\Version 
 4.0フルプロファイルHKLM\Software\Microsoft\NET Framewor kセットアップ\ NDP\v4 \バージョン
 
 [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の場合、これらのキーのいずれかの文字列値は#,#,####,#の形式になります。文字列の#,#,####部分はFrameworkのバージョンです。

  • .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)をインストールします。

.NET 4.5用のアップデート

.NET 4.5がインストールされている場合、レジストリにv4.5キーはありません。代わりに、HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\FullキーにReleaseという値が含まれているかどうかを確認する必要があります。この値が存在する場合は.NET 4.5がインストールされ、それ以外の場合はインストールされません。詳細は here および here をご覧ください。

363
Scott Dorman

次のサポート技術情報の記事に、この質問に対するマイクロソフトの正式な回答があります。

記事番号:318785 - 最終更新日:2008年11月7日 - 改訂:20.1インストールされている.NET Frameworkのバージョンとサービスパックが適用されているかどうかを確認する方法

残念ながら、2.0ディレクトリのmscorlib.dllバージョンは2.0バージョンを持ち、3.5 SP1がインストールされていても3.0または3.5ディレクトリのどちらにもmscorlib.dllバージョンが存在しないため、動作しないようです。マイクロソフトの公式の答えはそれほど誤解されているでしょうか?

17
anon

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);
            }
        }
    }
}
16
midspace

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDPのサブキーを列挙します。各サブキーは 。NET バージョンです。マシンに存在する場合はInstall=1値、サービスパックを示すSP値、MSIを使用してインストールされている場合はMSI=1値が必要です。 (Windows Vista上の.NET 2.0は、OSの一部であるため、たとえば最後のものはありません。)

8
Franci Penov

システムにインストールされている.NETバージョン4.5.2の存在を検出したいのですが、ASoft .NET Version Detector以上の解決策は見つかりませんでした。 。

さまざまな.NETバージョンを表示しているこのツールのスナップショット:

Snapshot of this tool showing different .NET versions

6
Faisal Mq

.NET 4.5.1用のアップデート

.NET 4.5.1が利用可能になったので、レジストリ内のReleaseという名前のキーの実際の値だけでなく、その存在を確認する必要があります。 378758という値は、.NET Framework 4.5.1がインストールされていることを意味します。ただし、説明されているように here この値はWindows 8.1では378675です。

5
JasonMcF

64ビットOSの場合、パスは次のようになります。

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
5
abhishek mehta

利用可能なGUIツールは、ASoft .NETバージョンディテクタです。コマンドラインでXML出力のファイル名を指定してXMLファイルを作成できます。

あなたは自動化のためにこれを使うことができます。 .NETに依存しない言語で書かれた小さなプログラムで、インストールは不要です。

5
CarlR

コンピュータにインストールされている.NET Frameworkのバージョンを確認する必要がありました。コントロールパネルに移動して[プログラムのアンインストール]オプションを選択するだけでした。その後、私はプログラムを名前順にソートし、Microsoft .NET Framework 4 Client Profileを見つけました。

4
Kudzai K

これは、インストールされている.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のバージョンに関する情報を取得するには、THE Get-FrameworkVersion()関数を使用してください。

3
cezarypiatek

SignumFramework (スタンドアロンでも使用可能)の Signum.Utilities ライブラリを使用すると、レジストリを自分で操作することなく、適切に入手できます。

AboutTools.FrameworkVersions().ToConsole();
//Writes in my machine:
//v2.0.50727 SP2
//v3.0 SP2
//v3.5 SP1
2
mapache

Windows 7では(Windows 8でも動作するはずですが、テストはしていません)。

コマンドプロンプトに行く

コマンドプロンプトに進む手順

  1. スタートメニューをクリック
  2. 検索ボックスに、「cmd」と入力します(引用符は含みません)。
  3. Cmd.exeを開く

Cmdに次のコマンドを入力します

wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version

これにより、インストールされているNET Frameworkの最新バージョンがわかります。

Raymond.cc Utilties を試してみることもできます。

1
Mayank Agarwal

方法:インストールされている.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以降」には別の機能があります。

0