Come faccio a sapere se .NET 3.5 SP1 è installato?


91

Come posso sapere se SP1 è stato installato su un server con .NET 3.5?

Risposte:


18

Usa Aggiungi / Rimuovi programmi dal Pannello di controllo.


1
Vai a capire. Più tardi, ho pensato di aver perso un punto "programmatico" alla tua domanda, Guy.
rp.

135

Guarda HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Uno di questi deve essere vero:

  • Il Versionvalore in quella chiave dovrebbe essere 3.5.30729.01
  • Oppure il SPvalore nella stessa chiave dovrebbe essere 1

In C # (tratto dal primo commento), potresti fare qualcosa in questo modo:

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 string name = @ "SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (nome); var version = subKey.GetValue ("Version"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft

2
Sulla mia macchina, Versionè 3.5.30729.5420ed SPè1
Kevin Smyth,

2
Sulla riga di comando: 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

Ci sarà un problema: se un utente non ha .NET installato, come viene eseguito il programma scritto con .NET per rilevare se .NET è installato?
zwcloud

27

Puoi andare su SmallestDotNet usando IE dal server. Questo ti dirà la versione e fornirà anche un link per il download se non sei aggiornato.


4
Ti dice solo la versione più alta, ad esempio se hai 4, non ti dirà se hai anche 3.5 sp 1
codeulike

12

Sono arrivato a questa pagina mentre cercavo di capire come rilevare le versioni del framework installate su un server senza accesso al desktop remoto o al registro, quindi la risposta di Danny V ha funzionato per me.

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

Ha funzionato come previsto per me. Ho appena creato un nuovo progetto di sito web, aggiunto il codice e messo nella condivisione, quindi richiesto la pagina.
Kris van der Mast

9

Dai un'occhiata a questo articolo che mostra le chiavi di registro che devi cercare e fornisce una libreria .NET che lo farà per te.

Innanzitutto, è necessario determinare se .NET 3.5 è installato esaminando HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, che è un valore DWORD. Se quel valore è presente e impostato su 1, viene installata quella versione del Framework.

Guarda HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, che è un valore DWORD che indica il livello di Service Pack (dove 0 non è un service pack).

Per essere corretti sulle cose, è davvero necessario assicurarsi che .NET Fx 2.0 e .NET Fx 3.0 siano installati prima e quindi verificare se è installato .NET 3.5. Se tutti e tre sono veri, è possibile verificare il livello del service pack.


1
il link dell'articolo è cambiato, ecco la nuova posizione: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake

5

Verificare che esista la seguente directory:

Nelle macchine a 64 bit:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Nelle macchine a 32 bit:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Dove% SYSTEMROOT% è la variabile ambientale SYSTEMROOT (ad esempio C: \ Windows).


2

Supponendo che il nome sia ovunque "Microsoft .NET Framework 3.5 SP1", puoi utilizzare questo:

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, il modo più semplice finora per verificare a livello di programmazione se 3.5 SP1 è installato, in realtà, se ha funzionato. L'ho provato, non funziona per me, restituisce sempre falso.
Evgeniy Berezovsky

Scorrendo la raccolta restituita da GetSubKeyNames (), il nome in testo normale viene utilizzato per alcuni prodotti, per alcuni - come i framework .net, vengono utilizzati gli ID prodotto {1ea1f -...}. Ecco perché non può essere trovato.
Evgeniy Berezovsky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.