the - كيف يمكنني اكتشاف إصدارات.NET Framework وحزم الخدمة المثبتة؟




same or higher version of.net framework 4 has already been installed on this computer (9)

تحديث لـ .NET 4.5.1

الآن ، يتوفر .NET 4.5.1 على القيمة الفعلية للمفتاح المسمى Release في السجل يجب التحقق منها ، وليس فقط وجودها. تعني القيمة 378758 أنه تم تثبيت .NET Framework 4.5.1. ومع ذلك ، كما هو موضح here هذه القيمة هي 378675 على Windows 8.1.

تم طرح سؤال مماثل here ، ولكنه كان مخصصًا لـ .NET 3.5. على وجه التحديد ، أنا أبحث عن ما يلي:

  1. ما هي الطريقة الصحيحة لتحديد إصدارات .NET Framework وحزم الخدمة المثبتة؟
  2. هل هناك قائمة بمفاتيح التسجيل التي يمكن استخدامها؟
  3. هل هناك أي تبعيات بين إصدارات الإطار؟

السجل هو الطريقة الرسمية لاكتشاف ما إذا تم تثبيت إصدار محدد من الإطار.

مفاتيح التسجيل المطلوبة التي تتغير حسب إصدار الإطار الذي تبحث عنه:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
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 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Install

عموما كنت تبحث عن:

"Install"=dword:00000001

باستثناء .NET 1.0 ، حيث تكون القيمة سلسلة ( REG_SZ ) بدلاً من رقم ( REG_DWORD ).

يتبع تحديد مستوى حزمة الخدمة نمطًا مشابهًا:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
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 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing

[1] Windows Media Center or Windows XP Tablet Edition

كما ترى ، فإن تحديد مستوى SP لـ .NET 1.0 يتغير إذا كنت تعمل على Windows Media Center أو Windows XP Tablet Edition. مرة أخرى ، يستخدم .NET 1.0 قيمة سلسلة بينما يستخدم الآخرون DWORD.

لـ .NET 1.0 قيمة السلسلة في أي من هذه المفاتيح له تنسيق # ، # ، # #. # الأخير هو مستوى حزمة الخدمة.

على الرغم من أنني لم أطلب ذلك صراحةً ، إذا كنت تريد معرفة رقم الإصدار الصحيح للإطار ، فأنت تستخدم مفاتيح السجل التالية:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
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 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 
4.0 Full Profile   HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 

[1] Windows Media Center or Windows XP Tablet Edition
[2] .NET 2.0 SP1
[3] .NET 2.0 Original Release (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 (CLR الإصدار 4.0) والذي يمكن تشغيله جنبًا إلى جنب مع CLR 2.0.

تحديث لـ .NET 4.5

لن يكون هناك مفتاح v4.5 في التسجيل إذا تم تثبيت .NET 4.5. بدلاً من ذلك ، عليك التحقق مما إذا كان المفتاح HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full يحتوي على قيمة تسمى Release . إذا كانت هذه القيمة موجودة ، فسيتم تثبيت .NET 4.5 ، وإلا لن تكون كذلك. يمكن العثور على المزيد من التفاصيل here here .


بالنسبة لنظام التشغيل 64 بت ، سيكون المسار كما يلي:

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

تعداد المفاتيح الفرعية من HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP . كل مفتاح فرعي هو إصدار .NET . يجب أن يكون قيمة Install=1 إذا كانت موجودة على الجهاز ، وهي قيمة SP تعرض حزمة الخدمة وقيمة MSI=1 إذا تم تثبيتها باستخدام MSI. (لا يحتوي .NET 2.0 على نظام التشغيل Windows Vista على آخر واحد على سبيل المثال ، لأنه جزء من نظام التشغيل.)


في Windows 7 (يجب أن يعمل مع Windows 8 أيضًا ، ولكني لم أختبره):

انتقل إلى موجه الأوامر

خطوات للانتقال إلى موجه الأوامر:

  1. انقر فوق قائمة ابدأ
  2. في مربع البحث ، اكتب "cmd" (بدون علامتي الاقتباس)
  3. افتح cmd.exe

في كمد ، اكتب هذا الأمر

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

هذا يعطي أحدث إصدار من NET Framework مثبت.

يمكن للمرء أيضا محاولة استخدام Raymond.cc لنفسه .


كنت أرغب في الكشف عن وجود إصدار .NET 4.5.2 مثبت على النظام الخاص بي ، ولم أجد أي حل أفضل من ASoft .NET Version Detector .

لقطة لهذه الأداة تعرض إصدارات .NET مختلفة:


هذا هو برنامج نصي PowerShell للحصول على إصدارات .NET Framework المثبتة

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 المثبتة . الرجاء استخدام الدالة Get-FrameworkVersion () للحصول على معلومات حول إصدارات .NET Framework المثبتة.


هناك أداة واجهة المستخدم الرسومية المتاحة ، ASoft .NET Version Detector ، والتي أثبتت دائما موثوقة للغاية. يمكنه إنشاء ملفات XML عن طريق تحديد اسم ملف إخراج XML في سطر الأوامر.

يمكنك استخدام هذا للأتمتة. إنه برنامج صغير مكتوب بلغة غير تابعة لـ .NET ولا يتطلب التثبيت.


يتم تثبيت الإصدار بيتا من الإصدار 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);
            }
        }
    }
}




version-detection