ฉันจะตรวจสอบว่ามีการติดตั้ง. NET Framework เวอร์ชันใดและเซอร์วิสแพ็คได้อย่างไร


289

คำถามที่คล้ายกันถูกถาม ที่นี่แต่เฉพาะกับ. NET 3.5 โดยเฉพาะฉันกำลังมองหาสิ่งต่อไปนี้:

  1. วิธีที่ถูกต้องในการพิจารณาว่ามีการติดตั้ง. NET Framework รุ่นใดและ Service Pack ใด
  2. มีรายการรีจิสตรีคีย์ที่สามารถใช้ได้หรือไม่?
  3. มีการอ้างอิงใด ๆ ระหว่างรุ่น Framework หรือไม่

2
คำถามนี้เกี่ยวข้องกับstackoverflow.com/questions/198931/…และstackoverflow.com/questions/182910/…
Pascal Paradis

ใช่แล้ว. ฉันรู้แล้วเกี่ยวกับอันแรก (อันที่ฉันอ้างถึงในคำถามของฉัน) ฉันไม่รู้เกี่ยวกับอีกคนหนึ่ง
Scott Dorman

3
ฉันประทับใจว่าคำถามนี้ (รวมถึงคำตอบ) และคำถามที่เกี่ยวข้องอย่างใกล้ชิดทั้งหมดไม่สนใจการมีอยู่ของค่า SKU - นี่คือความแตกต่างระหว่าง 4.5 และ 4.5.1
springy76

@ springy76 เหตุผลที่สิ่งนี้ไม่ได้ระบุถึงการมีอยู่ของค่า SKU นั้นเป็นเพราะสำหรับจุดประสงค์ในการพิจารณาว่าติดตั้ง Framework เวอร์ชันใด แต่ไม่เกี่ยวข้อง คำถามที่คุณอ้างถึงพยายามที่จะตรวจสอบว่ามีการติดตั้ง ". NET 4.0.2" หรือไม่ ปัญหาที่นี่คือว่าไม่มี. NET 4.0.2 เป็นอัปเดต (KB2544514) ไม่ใช่ Framework Framework หรือเซอร์วิสแพ็ค คุณสามารถดูบทความนี้ได้ที่ MSDN ( msdn.microsoft.com/en-us/library/hh925567(v=vs.110).aspx ) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีตรวจหาการติดตั้งการปรับปรุง
Scott Dorman

ที่นี่คุณมีตรวจสอบรุ่น. net ...
DanielV

คำตอบ:


365

รีจิสทรีเป็นวิธีที่เป็นทางการในการตรวจสอบว่ามีการติดตั้ง Framework เฉพาะรุ่นหรือไม่

ป้อนคำอธิบายรูปภาพที่นี่

ต้องการเปลี่ยนรีจิสตรีคีย์ใดขึ้นอยู่กับรุ่น Framework ที่คุณกำลังค้นหา:

Framework คีย์รีจิสทรีของเวอร์ชัน
-------------------------------------------------- ----------------------------------------
1.0 HKLM \ Software \ Microsoft \ .NETFramework \ Policy \ v1.0 \ 3705 
1.1 Setup \ NDP \ v1.1.4322 \ Install Framework HKLM \ Software \ Microsoft \ NET 
2.0 Setup \ NDP \ v2.0.50727 \ Install Framework HKLM \ Software \ Microsoft \ NET 
Setup \ NDP \ v3.0 \ Setup \ InstallSuccess HKLM \ Software \ Microsoft \ NET Framework 3.0 
3.5 Setup \ NDP \ v3.5 \ Install HKLM \ Software \ Microsoft \ NET 
4.0 ไคลเอนต์โปรไฟล์การตั้งค่า Setup \ NDP \ v4 \ Client \ Install HKLM \ Software \ Microsoft \ NET
4.0 โปรไฟล์การติดตั้ง Setup \ NDP \ v4 \ Full \ Install HKLM \ Software \ Microsoft \ NET

โดยทั่วไปคุณกำลังมองหา:

"Install"=dword:00000001

ยกเว้น. NET 1.0 ซึ่งค่าเป็นสตริง ( REG_SZ) แทนที่จะเป็นตัวเลข ( REG_DWORD)

การกำหนดระดับ service pack ตามรูปแบบที่คล้ายกัน:

Framework คีย์รีจิสทรีของเวอร์ชัน
-------------------------------------------------- ----------------------------------------
1.0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1.0 
1.0 [1] ส่วนประกอบ \ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \ Version ของ HKLM \ Software \ Microsoft \ Active 
1.1 Setup \ NDP \ v1.1.4322 \ SP Framework HKLM \ Software \ Microsoft \ NET 
2.0 Setup \ NDP \ v2.0.50727 \ SP Framework HKLM \ Software \ Microsoft \ NET 
Setup \ NDP \ v3.0 \ SP Framework 3.0 HKLM \ Software \ Microsoft \ NET 
3.5 Setup \ NDP \ v3.5 \ SP Framework HKLM \ Software \ Microsoft \ NET 
4.0 ไคลเอนต์โปรไฟล์การตั้งค่า Setup \ NDP \ v4 \ Client \ บริการกรอบงาน HKLM \ Software \ Microsoft \ NET
4.0 โปรไฟล์การติดตั้ง Framework \ NDP \ v4 \ Full \ Service HKLM \ Software \ Microsoft \ NET

[1] Windows Media Center หรือ Windows XP Tablet Edition

อย่างที่คุณเห็นการกำหนดระดับ SP สำหรับ. NET 1.0 จะเปลี่ยนแปลงหากคุณใช้ Windows Media Center หรือ Windows XP Tablet Edition อีกครั้ง. NET 1.0 ใช้ค่าสตริงในขณะที่อื่น ๆ ทั้งหมดใช้ DWORD

สำหรับ. NET 1.0 ค่าสตริงที่คีย์เหล่านี้มีรูปแบบ #, #, ####, # # สุดท้ายคือระดับ Service Pack

แม้ว่าฉันจะไม่ได้ขอสิ่งนี้อย่างชัดเจน แต่หากคุณต้องการทราบหมายเลขรุ่นที่แน่นอนของ Framework คุณจะต้องใช้รีจิสตรีคีย์เหล่านี้:

Framework คีย์รีจิสทรีของเวอร์ชัน
-------------------------------------------------- ----------------------------------------
1.0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1.0 
1.0 [1] ส่วนประกอบ \ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \ Version ของ HKLM \ Software \ Microsoft \ Active 
1.1 Setup \ NDP \ v1.1.4322 กรอบงาน HKLM \ Software \ Microsoft \ NET 
2.0 [2] Setup \ NDP \ v2.0.50727 \ เวอร์ชั่น HKLM \ Software \ Microsoft \ NET กรอบงาน 
2.0 [3] Setup \ NDP \ v2.0.50727 \ Increment Framework HKLM \ Software \ Microsoft \ NET
3.0 Setup \ NDP \ v3.0 \ Version HKLM \ Software \ Microsoft \ NET Framework 
3.5 Setup \ NDP \ v3.5 \ Version HKLM \ Software \ Microsoft \ NET Framework 
4.0 ไคลเอนต์โปรไฟล์การตั้งค่า Setup \ NDP \ v4 \ Version HKLM \ Software \ Microsoft \ NET 
4.0 โปรไฟล์การติดตั้ง Framework \ NDP \ v4 \ Version HKLM \ Software \ Microsoft \ NET 

[1] Windows Media Center หรือ 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 มิฉะนั้นจะไม่มี รายละเอียดเพิ่มเติมสามารถพบได้ที่นี่และที่นี่


1
สิ่งนี้ดูเหมือนจะไม่ทำงานสำหรับ. NET 1.1 ภายใต้ Vista x64 ไม่มีคีย์ v1.1.x อยู่ในตำแหน่งที่เป็นไปได้ ไอเดีย?
Chris Hynes

7
กุญแจสำหรับ. NET 4.0 นั้นไม่ถูกต้องนัก ฉันเห็นกุญแจเหล่านี้: Setup \ NDP \ Software \ Microsoft \ NET Framework \ Setup \ NDP \ v4 \ Client \ Install HKLM \ Software \ Microsoft \ NET กรอบ \ Setup \ NDP \ v4 \ Full \ Install HKLM \ Software \ Microsoft \ NET โฟลเดอร์ v4.0 มีคีย์เดียวเท่านั้น , (ค่าเริ่มต้น) ที่มีค่าคัดค้าน
RandomEngy

2
โพสต์นี้ไม่ครอบคลุม 4.5 และ 4.5 ​​ไม่ปรากฏในรีจิสทรีแม้ว่าจะติดตั้งแล้วก็ตาม
Klas Mellbourn

37
ชายคนนั้นที่ Microsoft คิดจะเพิ่มสวิตช์ -version หรือไม่?
gnuchu

2
มันเป็นเรื่องตลก ฉันไม่อยากจะเชื่อเลยว่ามันช่างโง่เหลือเกิน!
Alex Byrth

17

มีคำตอบอย่างเป็นทางการของ Microsoft สำหรับคำถามนี้ที่บทความฐานความรู้ต่อไปนี้:

หมายเลขบทความ (Article ID): 318785 - รีวิวล่าสุด: 7 พฤศจิกายน 2008 - รุ่น: 20.1 วิธีการตรวจสอบว่ามีการติดตั้ง. NET Framework รุ่นใดและมีการนำเซอร์วิสแพ็คไปใช้หรือไม่

น่าเสียดายที่มันไม่ทำงานเนื่องจากรุ่น mscorlib.dll ในไดเรกทอรี 2.0 มีรุ่น 2.0 และไม่มีรุ่น mscorlib.dll ในทั้ง 3.0 หรือ 3.5 แม้ว่าจะติดตั้ง 3.5 SP1 ... ทำไม คำตอบอย่างเป็นทางการของ Microsoft จะเข้าใจผิดหรือไม่?


2
+1 - ปรากฏว่า Microsoft อาจอัปเดตหน้าเว็บนั้นตั้งแต่คุณเชื่อมโยงเข้ากับตอนแรก ดังนั้นมันจึงดูเหมือนว่าอาจเป็นแหล่งข้อมูลที่ดีที่สุดแห่งหนึ่งในเรื่องนี้
jpierson

2
มันจะไปถึง 4.0
user316117

16

Framework 4 Beta ติดตั้งไปยังรีจิสตรีคีย์ที่แตกต่างกัน

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

1
เปลี่ยนRegistry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP", true)เป็นRegistry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP")เพื่อหลีกเลี่ยงข้อยกเว้นด้านความปลอดภัยสำหรับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ
Jon Cage

เยี่ยมมากฉันใช้ LinqPad และให้ผลลัพธ์ที่สมบูรณ์แบบ! share.linqpad.net/5cjihh.linq
user917170

มันแปลกที่คุณแชร์รายละเอียดเล็ก ๆ (เช่นติดตั้ง Service Pack เวอร์ชั่น) แต่ข้อมูลที่สำคัญกว่า (ถ้าเฟรมเวิร์กติดตั้งเพียงบางส่วนหรือทั้งหมด) จะถูกละเว้นโดยรหัสของคุณ !! มันเป็นความผิดที่จะปฏิบัติต่อ "ลูกค้า" และ "เต็ม" คีย์รีจิสทรีราวกับว่าพวกเขาเหมือนกัน หากออกจากคีย์ "ลูกค้า" เท่านั้นเช่น System.Web จะไม่สามารถใช้ได้ ข้อมูลสำคัญของคุณควรส่งคืนโดยรหัสของคุณ! หากผู้ใช้ถอนการติดตั้ง ". NET Framework 4 Extended" ในแผงควบคุมจะมีแอสเซมบลีที่หายไปหลายตัว
Elmue

8

ฉันต้องการที่จะตรวจสอบการปรากฏตัวของรุ่นสุทธิ 4.5.2 ติดตั้งในระบบของฉันและฉันพบวิธีแก้ปัญหาไม่ดีกว่าASoft .NET รุ่นตรวจจับ

สแนปชอตของเครื่องมือนี้แสดง. NET เวอร์ชันต่างๆ:

สแนปชอตของเครื่องมือนี้แสดง. NET เวอร์ชันต่างๆ


7

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDPระบุคีย์ย่อยของ แต่ละคีย์ย่อยเป็น. NETเวอร์ชัน ควรมีInstall=1ค่าหากมีอยู่ในเครื่องค่า SP ที่แสดงเซอร์วิสแพ็คและMSI=1ค่าหากติดตั้งโดยใช้ MSI (. NET 2.0 บน Windows Vista ไม่มีตัวอย่างล่าสุดเนื่องจากเป็นส่วนหนึ่งของระบบปฏิบัติการ)


ฉันไม่พบคีย์นี้ในเครื่องของฉัน (XP Pro) แต่ฉันมีสิ่งนี้: HKLM \ SOFTWARE \ Microsoft \ .NETFramework อย่างไรก็ตามค่าต่าง ๆ ที่คุณอธิบายไม่มีสำหรับฉัน
Charlie

คุณควรมีรหัสนี้หากคุณติดตั้ง. NET 1.1 หรือใหม่กว่า รหัสที่คุณกล่าวถึงใช้สำหรับ NET 1.0 เท่านั้น
Scott Dorman

แบบสอบถาม reg "Setup \ NDP กรอบ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework"
กระตือรือร้น 1

5

สำหรับระบบปฏิบัติการ 64 บิตพา ธ จะเป็น:

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

10
นี่เป็นเพียง "ค่อนข้าง" จริง รีจิสทรีใน Windows รุ่น 64 บิตแบ่งออกเป็นคีย์แบบ 32 บิตและ 64 บิต (โดยมีคีย์ 32 บิตจำนวนมากที่มีชื่อเหมือนกับคีย์ 64 บิต) Wow6432Nodeคีย์รีจิสทรีเป็นส่วนหนึ่งของสะท้อนรีจิสทรี WOW64 ซึ่งกระจกปุ่มบางอย่างและค่าระหว่าง 64 บิตและ 32 บิตมุมมองรีจิสทรี ไม่จำเป็นต้องเข้าถึงคีย์นี้โดยตรงเนื่องจากรีจิสตรีจะจัดการการเปลี่ยนเส้นทางและการมิเรอร์โดยอัตโนมัติ
Scott Dorman

5

อัพเดทสำหรับ. NET 4.5.1

ตอนนี้. NET 4.5.1 จะพร้อมใช้งานค่าที่แท้จริงของคีย์ที่ชื่อว่า Release ในรีจิสทรีจะต้องถูกตรวจสอบไม่ใช่แค่การมีอยู่จริง ค่า 378758 หมายความว่าติดตั้ง. NET Framework 4.5.1 อย่างไรก็ตามตามที่อธิบายไว้ที่นี่ค่านี้คือ 378675 บน Windows 8.1


5

มีเครื่องมือ GUI ที่พร้อมใช้งานASoft .NET Version Detectorซึ่งได้รับการพิสูจน์แล้วว่ามีความน่าเชื่อถือสูง มันสามารถสร้างไฟล์ XML โดยการระบุชื่อไฟล์ของเอาต์พุต XML บนบรรทัดคำสั่ง

คุณสามารถใช้สิ่งนี้สำหรับระบบอัตโนมัติ มันเป็นโปรแกรมเล็ก ๆ ที่เขียนด้วยภาษาที่ไม่ใช่. NET และไม่จำเป็นต้องติดตั้ง


4

ฉันต้องการทราบว่าฉันมีกรอบงาน. NET รุ่นใดในคอมพิวเตอร์ของฉันและสิ่งที่ฉันทำก็คือไปที่แผงควบคุมและเลือกตัวเลือก "ถอนการติดตั้งโปรแกรม" หลังจากนั้นฉันเรียงลำดับโปรแกรมตามชื่อและพบโปรไฟล์ลูกค้า Microsoft .NET Framework 4


1
ขอบคุณ - "วิธีแก้ปัญหา" อื่น ๆ ที่ฉันลองทุกครั้งมีข้อบกพร่องและไม่สามารถใช้งานได้ สิ่งนี้ทำ
user20493

เหตุผลที่ฉันมาหาข้อมูลนี้ก็คือสิ่งที่อยู่ภายใต้การถอนการติดตั้งโปรแกรมนั้นไม่น่าเชื่อถือทั้งหมดอย่างน้อยก็เมื่อมาถึง. NET Framework
tobbenb3

3

นี่คือสคริปต์ PowerShell เพื่อรับรุ่นกรอบงาน. NET ที่ติดตั้งไว้

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 เวอร์ชั่นที่ติดตั้ง


2

การใช้ไลบรารี่ Signum.UtilitiesจากSignumFramework (ซึ่งคุณสามารถใช้สแตนด์อะโลน) คุณสามารถทำให้มันเป็นอย่างดีและไม่ต้องจัดการกับรีจิสทรีด้วยตัวเอง:

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

2
ดูรหัสสำหรับวิธีนี้มันไม่สมบูรณ์เท่าที่คีย์รีจิสตรีใช้และจะพลาด. NET 1.0 อย่างสมบูรณ์และไม่แยกความแตกต่างระหว่าง. NET 2.0 (RTM) และ. NET 2.0 SP1 นอกจากนี้ยังไม่คำนึงถึงการพึ่งพาระหว่างเวอร์ชันเฟรมเวิร์ก
Scott Dorman

2
ไม่ใช่ทางออกที่ดี ไม่มีเหตุผลที่ดีที่จะดาวน์โหลดทั้งไลบรารีเพียงเพื่อรับรุ่น. NET เมื่อคุณสามารถทำงานเดียวกันได้ด้วยตัวคุณเองในโค้ดประมาณ 3 บรรทัด ในฐานะโปรแกรมเมอร์คุณควร "จัดการกับรีจิสทรีด้วยตนเอง"
TheSmurf

3
@DannySmurf ฉันไม่เห็นด้วย เมื่อ. NET 3.0 ได้รับการแนะนำให้รู้จักกับ MS สิ่งนี้ควรห่อหุ้มด้วย. NET API (ทันทีที่เรามี FX มากกว่าหนึ่งเลเยอร์บน CLR เดียวกัน) ฉันต้องการให้แอปพลิเคชันของฉันใช้ยูทิลิตี้ไลบรารีจากนั้นเมื่อมาถึง 4.1, 6.1, 7.100 ฉันสามารถอัปเดตไลบรารีและรายการปรับแต่งสำหรับเลเยอร์ของ. NET ที่แอพของฉันต้องการ แน่นอนว่าข้อโต้แย้งนี้ไม่ได้กักน้ำหากห้องสมุดไม่ทำงาน
yzorg

1

ดูวิธีการ: ตรวจสอบว่ามีการติดตั้ง. NET Framework รุ่นใด (MSDN)

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 และใหม่กว่า" มีฟังก์ชั่นอื่น


1

ใน 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
การใช้สายนั้นcmdทำให้ฉัน ERROR: Description = Invalid namespaceให้ฉัน
MEMark

ฉันยังได้ERROR: Description = Invalid namespace
ปีเตอร์

คำสั่งนี้ทำให้ฉันมีข้อผิดพลาด! (ดำเนินการจากเทอร์มินัล Windows 7)
Smrita

ขอบคุณ MEMark ปีเตอร์ Smrita สำหรับการแจ้งเตือน
Mayank Agarwal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.