ฉันจะทราบได้อย่างไรว่าติดตั้ง. NET 3.5 SP1 แล้ว?


คำตอบ:


18

ใช้เพิ่ม / ลบโปรแกรมจากแผงควบคุม


1
ไปคิด ต่อมาฉันคิดว่าฉันพลาด "ตามโปรแกรม" ที่ชี้ไปที่คำถามของคุณ Guy
rp.

135

ดูที่HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. ข้อใดข้อหนึ่งต้องเป็นจริง:

  • Versionในคีย์ที่ควรจะ3.5.30729.01
  • หรือSPค่าในคีย์เดียวกันควรเป็น1

ใน C # (นำมาจากความคิดเห็นแรก) คุณสามารถทำอะไรบางอย่างตามบรรทัดต่อไปนี้:

const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5";
RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);
var version = subKey.GetValue("Version").ToString();
var servicePack = subKey.GetValue("SP").ToString();

8
ชื่อสตริง const = @ "SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (ชื่อ); var version = subKey.GetValue ("เวอร์ชัน"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft

2
บนเครื่องของฉันVersionคือ3.5.30729.5420และSPคือ1
Kevin Smyth

2
ในบรรทัดคำสั่ง: reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V Version reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V SP
Kevin Smyth

จะมีปัญหา: หากผู้ใช้ไม่ได้ติดตั้ง. NET โปรแกรมของคุณที่เขียนด้วย. NET จะทำงานอย่างไรเพื่อตรวจสอบว่ามีการติดตั้ง. NET หรือไม่?
zwcloud

27

คุณสามารถไปที่SmlestDotNetโดยใช้ IE จากเซิร์ฟเวอร์ ซึ่งจะบอกเวอร์ชันให้คุณทราบและยังมีลิงก์ดาวน์โหลดหากคุณล้าสมัย


4
บอกเฉพาะเวอร์ชันสูงสุดเท่านั้นเช่นถ้าคุณมี 4 มันจะไม่บอกคุณว่าคุณมี 3.5 sp 1 ด้วยหรือไม่
codeulike

12

ฉันมาที่หน้านี้ในขณะที่พยายามหาวิธีตรวจจับเวอร์ชันของเฟรมเวิร์กที่ติดตั้งบนเซิร์ฟเวอร์โดยไม่ต้องเข้าถึงเดสก์ท็อประยะไกลหรือรีจิสตรีดังนั้นคำตอบของ Danny V จึงเหมาะกับฉัน

string path = System.Environment.SystemDirectory;
path = path.Substring( 0, path.LastIndexOf('\\') );
path = Path.Combine( path, "Microsoft.NET" );
// C:\WINDOWS\Microsoft.NET\

string[] versions = new string[]{
    "Framework\\v1.0.3705",
    "Framework64\\v1.0.3705",
    "Framework\\v1.1.4322",
    "Framework64\\v1.1.4322",
    "Framework\\v2.0.50727",
    "Framework64\\v2.0.50727",
    "Framework\\v3.0",
    "Framework64\\v3.0",
    "Framework\\v3.5",
    "Framework64\\v3.5",
    "Framework\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework64\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework\\v4.0",
    "Framework64\\v4.0"
};

foreach( string version in versions )
{
    string versionPath = Path.Combine( path, version );

    DirectoryInfo dir = new DirectoryInfo( versionPath );
    if( dir.Exists )
    {
        Response.Output.Write( "{0}<br/>", version );
    }
}

ทำงานตามที่คาดไว้สำหรับฉัน เพิ่งสร้างโปรเจ็กต์เว็บไซต์ใหม่เพิ่มโค้ดและนำไปแชร์จากนั้นขอเพจ
Kris van der Mast

9

ลองดูบทความนี้ซึ่งแสดงคีย์รีจิสทรีที่คุณต้องค้นหาและมีไลบรารี. NET ที่จะดำเนินการให้คุณ

ขั้นแรกคุณควรตรวจสอบว่ามีการติดตั้ง. NET 3.5 หรือไม่โดยดูที่ HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install ซึ่งเป็นค่า DWORD หากมีค่านั้นอยู่และตั้งค่าเป็น 1 แสดงว่ามีการติดตั้ง Framework เวอร์ชันนั้น

ดูที่ HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP ซึ่งเป็นค่า DWORD ที่ระบุระดับ Service Pack (โดยที่ 0 ไม่ใช่ Service Pack)

เพื่อให้ถูกต้องคุณต้องตรวจสอบให้แน่ใจว่าได้ติดตั้ง. NET Fx 2.0 และ. NET Fx 3.0 ก่อนแล้วจึงตรวจสอบว่ามีการติดตั้ง. NET 3.5 หรือไม่ หากทั้งสามเป็นจริงคุณสามารถตรวจสอบระดับเซอร์วิสแพ็คได้


1
ลิงก์บทความมีการเปลี่ยนแปลงที่นี่คือตำแหน่งใหม่: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake

5

ตรวจสอบไดเร็กทอรีต่อไปนี้มีอยู่:

ในเครื่อง 64 บิต:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

ในเครื่อง 32 บิต:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

โดยที่% SYSTEMROOT% คือตัวแปรสภาพแวดล้อมของระบบ SYSTEMROOT (เช่น C: \ Windows)


2

สมมติว่าชื่อนี้อยู่ทุกหนทุกแห่ง "Microsoft .NET Framework 3.5 SP1" คุณสามารถใช้สิ่งนี้:

string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
    return rk.GetSubKeyNames().Contains("Microsoft .NET Framework 3.5 SP1");
}

+1 ซึ่งเป็นวิธีที่ง่ายที่สุดในการตรวจสอบโดยทางโปรแกรมว่ามีการติดตั้ง 3.5 SP1 หรือไม่ - จริงหรือไม่หากใช้งานได้ ฉันลองแล้วมันไม่ได้ผลสำหรับฉันมันจะส่งคืนเท็จเสมอ
Evgeniy Berezovsky

การข้ามผ่านคอลเล็กชันที่ GetSubKeyNames () ส่งคืนชื่อข้อความธรรมดาจะใช้กับผลิตภัณฑ์บางอย่างสำหรับบางผลิตภัณฑ์เช่น. net frameworks จะมีการใช้รหัสผลิตภัณฑ์ {1ea1f -... } นั่นเป็นสาเหตุที่หาไม่เจอ
Evgeniy Berezovsky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.