Bagaimana cara mengetahui jika .NET 3.5 SP1 diinstal?

91

Bagaimana cara mengetahui apakah SP1 telah diinstal di server yang memiliki .NET 3.5?

Orang
sumber

Jawaban:

18

Gunakan Tambah / Hapus program dari Panel Kontrol.

rp.
sumber
1
Sosok pergi. Kemudian, saya pikir saya melewatkan poin "programatis" untuk pertanyaan Anda, Guy.
rp.
135

Lihat HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Salah satunya harus benar:

  • The Versionnilai dalam kunci yang harus 3.5.30729.01
  • Atau SPnilai dalam kunci yang sama harus 1

Di C # (diambil dari komentar pertama), Anda bisa melakukan sesuatu seperti ini:

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();
sinar
sumber
8
const nama string = @ "PERANGKAT LUNAK \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (nama); var version = subKey.GetValue ("Version"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft
2
Di mesin saya, Versionadalah 3.5.30729.5420dan SPsekarang1
Kevin Smyth
2
Pada baris perintah: 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
Akan ada masalah: jika pengguna tidak menginstal .NET, bagaimana program Anda yang ditulis dengan .NET berjalan untuk mendeteksi jika .NET diinstal?
zwcloud
27

Anda bisa pergi ke SmallestDotNet menggunakan IE dari server. Itu akan memberi tahu Anda versinya dan juga menyediakan tautan unduhan jika Anda ketinggalan zaman.

Andy May
sumber
4
Hanya memberi tahu Anda versi tertinggi, misalnya jika Anda memiliki 4, itu tidak akan memberi tahu Anda apakah Anda juga memiliki 3.5 sp 1
codeulike
12

Saya membuka halaman ini ketika mencoba mencari cara untuk mendeteksi versi framework yang diinstal di server tanpa akses ke desktop atau registry jarak jauh, jadi jawaban Danny V berhasil untuk saya.

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 );
    }
}
Matt
sumber
Bekerja seperti yang diharapkan untuk saya. Baru saja membuat proyek situs web baru, menambahkan kode dan meletakkannya di bagian yang dibagikan, lalu meminta halaman.
Kris van der Mast
9

Lihat artikel ini yang menunjukkan kunci registri yang perlu Anda cari dan menyediakan pustaka .NET yang akan melakukannya untuk Anda.

Pertama, Anda harus menentukan apakah .NET 3.5 diinstal dengan melihat HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, yang merupakan nilai DWORD. Jika nilai itu ada dan disetel ke 1, maka versi Kerangka tersebut diinstal.

Lihat HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, yang merupakan nilai DWORD yang menunjukkan tingkat Paket Layanan (di mana 0 adalah bukan paket layanan).

Untuk benar tentang berbagai hal, Anda benar-benar perlu memastikan bahwa .NET Fx 2.0 dan .NET Fx 3.0 diinstal terlebih dahulu dan kemudian periksa untuk melihat apakah .NET 3.5 diinstal. Jika ketiganya benar, maka Anda dapat memeriksa tingkat paket layanan.

Scott Dorman
sumber
1
tautan artikel diubah, ini dia lokasi baru: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake
5

Periksa apakah direktori berikut ada:

Di mesin 64bit:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Di mesin 32bit:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Di mana% SYSTEMROOT% adalah variabel lingkungan SYSTEMROOT (mis. C: \ Windows).

Danny Varod
sumber
2

Dengan asumsi bahwa nama ada di mana-mana "Microsoft .NET Framework 3.5 SP1", Anda dapat menggunakan ini:

string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
    return rk.GetSubKeyNames().Contains("Microsoft .NET Framework 3.5 SP1");
}
Panos
sumber
+1, cara termudah sejauh ini untuk secara terprogram memeriksa apakah 3.5 SP1 diinstal - sebenarnya, apakah berfungsi. Saya mencobanya, tidak berhasil untuk saya, selalu mengembalikan false.
Evgeniy Berezovsky
Melihat sekilas koleksi yang dikembalikan oleh GetSubKeyNames (), nama teks biasa digunakan untuk beberapa produk, untuk beberapa - seperti kerangka kerja .net, id produk {1ea1f -...} digunakan. Itulah mengapa tidak dapat ditemukan.
Evgeniy Berezovsky