Comment savoir si .NET 3.5 SP1 est installé?

91

Comment puis-je savoir si SP1 a été installé sur un serveur doté de .NET 3.5?

Gars
la source

Réponses:

18

Utilisez Ajout / Suppression de programmes du Panneau de configuration.

rp.
la source
1
Allez comprendre. Plus tard, j'ai pensé que j'avais manqué un point "programmé" à votre question, Guy.
rp.
135

Regardez HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. L'un de ces éléments doit être vrai:

  • La Versionvaleur de cette clé doit être 3.5.30729.01
  • Ou la SPvaleur de la même clé doit être 1

En C # (tiré du premier commentaire), vous pouvez faire quelque chose du genre:

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();
Rayon
la source
8
const string name = @ "SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (nom); var version = subKey.GetValue ("Version"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Chris Craft
2
Sur ma machine, Versionest 3.5.30729.5420et SPest1
Kevin Smyth
2
Sur la ligne de commande: 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
Il y aura un problème: si un utilisateur n'a pas installé .NET, comment votre programme écrit avec .NET s'exécute-t-il pour détecter si .NET est installé?
zwcloud
27

Vous pouvez accéder à SmallestDotNet en utilisant IE à partir du serveur. Cela vous indiquera la version et fournira également un lien de téléchargement si vous êtes obsolète.

Andy May
la source
4
Cependant, seulement vous indique la version la plus élevée, par exemple si vous en avez 4, cela ne vous dira pas si vous avez également 3,5 sp 1
codeulike
12

Je suis venu sur cette page en essayant de comprendre comment détecter les versions de framework installées sur un serveur sans accès au bureau ou au registre à distance, donc la réponse de Danny V a fonctionné pour moi.

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 );
    }
}
Mat
la source
A travaillé comme prévu pour moi. Je viens de créer un nouveau projet de site Web, d'ajouter le code et de le mettre sur le partage, puis de demander la page.
Kris van der Mast
9

Jetez un œil à cet article qui montre les clés de registre que vous devez rechercher et fournit une bibliothèque .NET qui le fera pour vous.

Tout d'abord, vous devez déterminer si .NET 3.5 est installé en examinant HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, qui est une valeur DWORD. Si cette valeur est présente et définie sur 1, cette version du Framework est installée.

Regardez HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, qui est une valeur DWORD qui indique le niveau du Service Pack (où 0 est aucun Service Pack).

Pour être correct sur les choses, vous devez vraiment vous assurer que .NET Fx 2.0 et .NET Fx 3.0 sont installés en premier, puis vérifier si .NET 3.5 est installé. Si les trois sont vrais, vous pouvez vérifier le niveau du Service Pack.

Scott Dorman
la source
1
le lien de l'article a changé, voici le nouvel emplacement: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake
5

Vérifiez que le répertoire suivant existe:

Sur les machines 64 bits:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Sur les machines 32 bits:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Où% SYSTEMROOT% est la variable d'environnement SYSTEMROOT (par exemple C: \ Windows).

Danny Varod
la source
2

En supposant que le nom est partout «Microsoft .NET Framework 3.5 SP1», vous pouvez utiliser ceci:

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
la source
+1, le moyen le plus simple jusqu'à présent de vérifier par programme si 3.5 SP1 est installé - en fait, si cela a fonctionné. Je l'ai essayé, ça ne marche pas pour moi, ça retourne toujours faux.
Evgeniy Berezovsky
En parcourant la collection retournée par GetSubKeyNames (), le nom en texte brut est utilisé pour certains produits, pour certains - comme les frameworks .net, les identifiants de produit {1ea1f -...} sont utilisés. C'est pourquoi il ne peut pas être trouvé.
Evgeniy Berezovsky