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.
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? –
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