.NET Frameworkのバージョンとサービスパックがインストールされているものを検出するにはどうすればよいですか?


Answers

この質問に対する公式のMicrosoftの回答は、次のナレッジベースの記事です。

文書番号:318785 - 最終更新日:2008年11月7日 - リビジョン:20.1インストールされている.NET FrameworkのバージョンとService Packが適用されているかどうかを確認する方法

残念ながら、2.0ディレクトリのmscorlib.dllバージョンには2.0バージョンがあり、3.5 SP1がインストールされていても3.0または3.5ディレクトリにはmscorlib.dllバージョンがないため、動作しないように見えます正式なマイクロソフトの回答は間違っているだろうか?

Question

同様の質問がhereで尋ねられhere 、.NET 3.5固有のものでした。 具体的には、私は次を探しています:

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



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




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

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\



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




利用可能なGUIツール、 ASoft .NETバージョン検出器があり 、常に信頼性が高いと証明されています。 コマンドラインでXML出力のファイル名を指定することにより、XMLファイルを作成することができます。

これを自動化に使用できます。 これは、非.NET依存言語で書かれた小さなプログラムで、インストールする必要はありません。




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も同じように試してみることができます。