मैं कैसे पता लगा सकता हूँ कि क्या .NET फ़्रेमवर्क संस्करण और सर्विस पैक स्थापित हैं?


एक समान प्रश्न यहां पूछा गया था, लेकिन यह नेट 3.5 के लिए विशिष्ट था। विशेष रूप से, मैं निम्न के लिए देख रहा हूं:

  1. यह निर्धारित करने का सही तरीका क्या है कि कौन सा .NET Framework संस्करण और सर्विस पैक स्थापित हैं?
  2. क्या रजिस्ट्री कुंजियों की एक सूची है जिसका उपयोग किया जा सकता है?
  3. क्या फ्रेमवर्क संस्करणों के बीच कोई निर्भरता है?


Answers


रजिस्ट्री का पता लगाने का आधिकारिक तरीका है कि फ्रेमवर्क के एक विशिष्ट संस्करण को स्थापित किया गया है।

आपके द्वारा देखे जा रहे फ्रेमवर्क संस्करण के आधार पर कौन सा रजिस्ट्री कुंजियां आवश्यक हैं:

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_DWORD ) की बजाय एक स्ट्रिंग ( REG_SZ ) है

सेवा पैक स्तर निर्धारित करना एक समान पैटर्न का पालन करता है:

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

जैसा कि आप देख सकते हैं, यदि आप Windows मीडिया केंद्र या Windows XP टैबलेट संस्करण पर चल रहे हैं तो .NET 1.0 परिवर्तनों के लिए एसपी स्तर का निर्धारण करना। फिर, .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 के लिए इनमें से किसी भी कुंजी पर स्ट्रिंग मान #,#,####,# का प्रारूप है। #,#,#### स्ट्रिंग का भाग फ्रेमवर्क संस्करण है

  • .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 स्थापित है, अन्यथा ऐसा नहीं है। अधिक जानकारी यहां और यहां मिल सकती है




एक आधिकारिक माइक्रोसॉफ्ट के पास इस प्रश्न का निम्नलिखित ज्ञान आधार आलेख है:

आलेख ID: 318785 - अंतिम समीक्षा: 7 नवंबर, 2008 - संशोधन: 20.1 .NET Framework के कौन सा संस्करण स्थापित हैं और यह निर्धारित करने के लिए कि सर्विस पैक लागू किया गया है या नहीं

दुर्भाग्य से, यह काम करने के लिए प्रकट नहीं होता है, क्योंकि 2.0 निर्देशिका में mscorlib.dll संस्करण 2.0 संस्करण है, और 3.0 या 3.5 निर्देशिकाओं में कोई भी mscorlib.dll संस्करण नहीं है, हालांकि 3.5 एसपी 1 स्थापित है ... क्यों क्या आधिकारिक माइक्रोसॉफ्ट का जवाब इतना गलत है?




फ्रेमवर्क 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);
            }
        }
    }
}



HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP की उपकुंजियों की गणना करें प्रत्येक उपकुंजी एक .NET संस्करण है। यह Install=1 मूल्य होना चाहिए, अगर यह मशीन पर मौजूद है, एक सपा मान जो सेवा पैक और एक MSI=1 मान दिखाता है कि यह MSI का उपयोग करके स्थापित किया गया था। (Windows Vista में .NET 2.0 उदाहरण के लिए अंतिम नहीं है, क्योंकि यह ओएस का हिस्सा है।)




मैं अपने सिस्टम पर स्थापित .NET संस्करण 4.5.2 की उपस्थिति का पता लगा रहा था, और मुझे एएसओफ़ेट .नेट संस्करण डिटेक्टर की तुलना में कोई बेहतर समाधान नहीं मिला।

इस उपकरण का स्नैपशॉट विभिन्न एनएटी संस्करण दिखा रहा है:




एफडब्ल्यूआईडब्ल्यू ... यहां एक और समाधान है जो वास्तविक दुनिया में व्यापक रूप से परीक्षण किया गया लगता है (लेकिन यह सी में है)




64-बिट OS के लिए, पथ होगा:

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



.NET 4.5.1 के लिए अद्यतन

अब जबकि .NET 4.5.1 उपलब्ध है, रजिस्ट्री में रिलीज की कुंजी नाम के वास्तविक मान की जांच की जानी चाहिए, न कि इसकी मौजूदगी। 378758 का मान इसका अर्थ है कि .NET Framework 4.5.1 स्थापित है। हालांकि, जैसा कि यहां बताया गया है कि यह मान विंडोज 8.1 पर 378675 है।




एक जीयूआई उपकरण उपलब्ध है, एएसओएफटी.नेट वर्जन डिटेक्टर , जो हमेशा बेहद विश्वसनीय साबित हुआ है। यह कमांड लाइन पर XML आउटपुट के फ़ाइल नाम को निर्दिष्ट करके XML फ़ाइलों को बना सकता है।

आप इसे स्वचालन के लिए इस्तेमाल कर सकते हैं यह एक छोटा कार्यक्रम है, जिसे गैर- .NET निर्भर भाषा में लिखा गया है और स्थापना की आवश्यकता नहीं है।




मुझे यह पता लगाना था कि मेरे कंप्यूटर पर जो .NET ढाँचा का संस्करण था, और मैंने जो किया था, वह नियंत्रण कक्ष में गया और "एक प्रोग्राम अनइंस्टॉल करें" विकल्प का चयन करें। इसके बाद, मैंने कार्यक्रमों को नाम से सॉर्ट किया, और Microsoft .NET Framework 4 क्लाइंट प्रोफाइल को मिला।




यहां स्थापित .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 () फ़ंक्शन का उपयोग करें।




SignumFramework से Signum.Utilities पुस्तकालय का उपयोग करना (जो आप अकेले उपयोग कर सकते हैं), आप इसे अच्छी तरह से और अपने आप से रजिस्ट्री से निपटने के बिना प्राप्त कर सकते हैं:

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



मैं सभी। नेट फ्रेमवर्क संस्करणों का पता लगाने के लिए रेमंडक .नेट डिटेक्टर (जो https://www.raymond.cc/blog/download/did/1741/ डाउनलोड किया जा सकता है) का उपयोग कर रहा हूँ।










विंडोज 7 में (इसे विंडोज 8 के लिए भी काम करना चाहिए, लेकिन मैंने इसका परीक्षण नहीं किया है):

कमांड प्रॉम्प्ट पर जाएं

कमांड प्रॉम्प्ट पर जाने के लिए चरणः

  1. प्रारंभ मेनू पर क्लिक करें
  2. खोज बॉक्स में टाइप करें "cmd" (उद्धरण रहित)
  3. ओपन सीएमडी.एक्सए

सीएमडी में, यह कमांड टाइप करें

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

यह संस्थापित एनईटी फ्रेमवर्क का नवीनतम संस्करण देता है।

कोई भी इसके लिए रेमंड। सीसी यूरीलेटिज की भी कोशिश कर सकता है।




कैसे देखें : निर्धारित करें कि किस .NET Framework संस्करणों को स्थापित किया गया है (MSDN)।

एमएसडीएन एक फ़ंक्शन का उदाहरण पेश करता है जो संस्करण 1-4 के लिए नौकरी कर रहा है। लेख के अनुसार, विधि आउटपुट है:

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 और बाद के संस्करण" के लिए एक और समारोह है