2010-12-09 62 views
3

pouvez-vous partager un vbscript qui vérifie si .NET 2.0 est installé sur une machine.vbscript pour vérifier si .net 2.0 est installé

J'ai fait une recherche sur le web et la plupart de ces applications "vérifier si .net est installé" recherchent simplement une clé de registre particulière, ignorant ainsi le fait que l'installation pourrait être corrompue. Fondamentalement je cherche le manuscrit qui essaye de créer un objet de .NET (qui devrait sûrement être créateur - par exemple System.Object) et si elle échoue - .NET n'est pas installé ou l'installation est corrompue (donc pas mieux que n'avoir aucun .NET installé du tout).

+0

est-il une raison particulière que vous devez faire en VBScript? Qu'est-ce que vous essayez d'accomplir? Est-ce quelque chose que vous voulez exécuter dans le cadre d'un programme d'installation pour une application .NET? –

+0

Oui, j'ai un système de déploiement/lancement xcopy implémenté sur VBScript. Avant le démarrage de l'application, je voudrais vérifier si .NET est présent et non endommagé. – Andrew

Répondre

2

La manière officielle de détecter si une version particulière de .NET Framework est installée consiste à vérifier l'existence de la clé de registre correspondante. Dans ce cas, vous êtes à la recherche de cette clé:

HKLM\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0

Si la valeur REG_SZ « 50727 » est présent, alors vous savez que la version 2.0 du Framework est installé.

Alors, comment faites-vous cela dans VBScript? Voici un petit script qui fait cela:

Option Explicit 
Dim oShell 
Dim value 

''#If the key isn't there when we try to read it, an error will be generated 
''# that we will later test for, so we want to automatically resume execution. 
On Error Resume Next 

''#Try reading the registry value 
Set oShell = CreateObject("WScript.Shell") 
value = oShell.RegRead("HKLM\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0\50727") 

''#Catch the error 
If Err.Number = 0 Then 
    ''#Error code 0 indicates success 
    MsgBox("Version 2.0 of the .NET Framework is installed.") 
Else 
    ''#Any other error code indicates failure 
    MsgBox("Version 2.0 of the .NET Framework is NOT installed.") 
End If 

Si vous êtes désireux d'intégrer cette vérification dans un existant VBScript, je vous suggère de le transformer en une fonction qui renvoie une valeur Boolean (au lieu d'afficher une boîte de message) selon que la bonne version de .NET Framework est installée ou non. Vous pouvez ensuite appeler cette fonction depuis votre script. Remarque: Assurez-vous de désactiver la gestion des erreurs (ou au moins de revenir à un style plus approprié) à la fin de la fonction si vous suivez cette route! Vous ne voulez pas utiliser On Error Resume Next à moins que vous ne traitiez explicitement les erreurs plus tard dans votre code.

On Error Goto 0 ''#Turn "On Error Resume Next" back off! 

EDIT: Si vous êtes convaincu que vous voulez déterminer la validité d'une installation .NET en essayant de instancier un objet cadre commun, le script est très similaire. (En fait, il est même un peu plus simple que de faire accès au registre.) Comme précédemment, CreateObject est utilisé, mais cette fois pour instancier un objet de la classe de base System.Object:

On Error Resume Next 

Dim testObj 
Set testObj = CreateObject("System.Object") 

If Err.Number = 0 Then 
    MsgBox("Success") 
Else 
    MsgBox("Failure") 
End If 

Cependant, cela pas tell vous qui version de .NET Framework est installé. Ce test passera pour n'importe quelle version, y compris 1.1, 2.0, 4.0, futures versions, etc. Votre question semble indiquer une exigence pour la version 2.0, et si c'est le cas, vous devriez vraiment envisager d'utiliser la première option. D'après mon expérience, de telles installations «corrompues» du Framework sont extrêmement rares, et si vous les voyez aussi souvent que je le laisse croire, vous pourriez envisager d'installer la bonne version du Framework comme une question de cours. Je ne suis pas convaincu qu'être capable d'instancier un objet de type System.Object est vraiment plus un test "vrai" de la validité de l'installation de Framework que de vérifier la présence de clés de Registre ou de répertoires.

Cela a maintenant été testé pour fonctionner sur une machine virtuelle Windows XP propre sans le .NET Framework installé. Il signale correctement l'échec. Sur d'autres machines avec le .NET Framework installé, il signale correctement le succès.

+0

Je suis conscient de la manière officielle de MS, mais je préfère avoir un script qui essaye de créer l'objet .NET "sûrement créable" comme test. Récemment, j'ai eu de nombreux incidents de support lorsque l'installation de .NET a été corrompue (bien que toutes les clés de registre étaient en place). – Andrew

+0

@Andrew: J'ai mis à jour ma réponse pour inclure le test que vous recherchez. Cependant, j'ai quelques doutes sur cette méthode au-delà du fait que ce n'est pas * la * façon officielle de faire les choses. –

+1

L'instruction "Sur erreur" dans VBScript se termine à la fin de la fonction. Il n'est pas nécessaire de faire "On Error Goto 0" à la fin de la fonction pour inverser le comportement. – mheyman

2

Cela fonctionne aussi bien et est une copie exacte du site Web MSDN des moyens recommandés pour tester l'installation de .net.

Site Web - http://support.microsoft.com/kb/318785/en-us

''official MSDN verison 2.0 
value = oShell.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version") 
''#Catch the error 
If Err.Number = 0 Then  
    ''#Error code 0 indicates success   
    MsgBox("Version 2.0 of the official .NET Framework is installed.") 
Else  
''#Any other error code indicates failure  
    MsgBox("Version 2.0 of the official .NET Framework is NOT installed.") 
End If 
0

La meilleure option pour savoir si .NET .NET 2 est correctement installé, je recommande de faire un script qui cherchent « 2 choses »;

  1. Vérifiez si la RegKey est toujours présente, comme l'a montré 'Cody Gray'.

  2. Je écrirais un code qui vérifie si NET FRAMEWORK 2 (situé dans le répertoire Windows) est plus petit que par exemple 75 MB (normalement environ 82 -87 Mo), si c'est désinstallé ou endommagé.

en mettant ces 2 codes ensemble, vous serez en mesure de savoir si NET Framework 2 est correctement installé sur la machine de l'utilisateur ou non

+0

Une clé de registre et un dossier de taille correcte ne constituent pas un cadre correctement installé. La corruption est beaucoup plus difficile (voire impossible) à détecter. –