Skript-Absturz durch Registry-Schlüsselprüfung verhindern

Sie programmieren VisualBasic-Scripte, mit denen Sie unter anderem Schlüssel in der Registrierungs-Datenbank bearbeiten. Wenn ein angesprochener Schlüssel nicht existiert, stürzt das Skript mit einem Laufzeitfehler einfach ab. Sie wollen solche Abstürze vermeiden.

Die gewünschte Funktion müssen Sie selbst entwickeln und in Ihr Programm integrieren. VBScript kennt leider keine Anweisung wie die Methode »File Exists()« vom Objekt »FileSystem«, die vor dem Lesezugriff die Existenz eines
Registry-Schlüssels prüfen kann. Geben Sie daher am Ende Ihres Skripts die
im Folgenden beschriebene Funktion »RegKeyExist()« ein.

Function RegKeyExist (szRegKey)

Dim objWshShell
Dim szValue
On Error Resume Next
Set objWshShell = CreateObject(„WScript.Shell“)
szValue = objWshShell.RegRead(szRegKey)
If err.number <> 0 Then
RegKeyExist = False
Else
RegKeyExist = True
End If
Set objWshShell = nothing
End Function
Mit dem Parameter »szRegKey« übergeben Sie den Schlüssel, dessen Existenz die Funktion in der Registrierungs-Datenbank prüfen soll. Als Ergebnis der Kontrolle gibt sie »True« (Schlüssel vorhanden) oder »False« (Schlüssel fehlt) zurück. Sie können die Funktion in Ihrer Programmierung wie folgt einsetzen:
Dim objShell

Dim szRegValue
Const constRegKey = „HKEY_CURRENT_USER\Software\Alex\Test“
Set objShell = CreateObject(„WScript.Shell“)
If RegKeyExist (constRegKey) Then
szRegValue = objShell.RegRead(constRegKey)
Else
MsgBox „Der Schlüssel „ & constRegKey & „ existiert nicht!“
WScript.Quit
End If
MsgBox „Folgender Wert wurde gelesen: „ & szRegValue
Und so funktioniert »RegKeyExist()«: Zuerst wird das Objekt »objWshShell« vom Typ »WScript.Shell« für den Zugriff auf die Registrierungs-Datenbank erzeugt. Als nächstes versucht die Funktion mit »szValue = objWshShell.Reg-Read(szRegKey)«, den aktuellen Wert aus dem mit »szRegKey« übergebenen Schlüssel zu lesen. Anschließend prüft sie, ob die Eigenschaft »number« des allgemeinen Error-Objektes »err« ungleich »0« ist. In diesem Fall hat der zuvor ausgeführte Befehl einen Fehler produziert, weil der gewünschte Schlüssel in der Registry nicht existiert. Dann bestimmt »RegKeyExist = False« den Wert »False« als Rückgabewert. Anderenfalls wird »True« zurückgeliefert.

! Achtung: Sie müssen Windows am Beginn der Funktion mit »On Error Resume Next« anweisen, im Fehlerfall mit der Ausführung des nächsten Befehls fortzufahren. Sonst beendet sich das Programm wieder mit einem Laufzeitfehler, sobald es den Wert aus einem nicht existenten Schlüssel zu lesen versucht.