Ich dachte, das wäre einfach, aber anscheinend tut es niemand ... Ich versuche zu sehen, ob ein Registrierungsschlüssel existiert. Es ist mir egal, ob irgendwelche Werte darin enthalten sind, wie (Standard).
Das habe ich versucht.
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
objRegistry.GetStringValue &H80000003,".DEFAULT\Network","",regValue
If IsEmpty(regValue) Then
Wscript.Echo "The registry key does not exist."
Else
Wscript.Echo "The registry key exists."
End If
Ich möchte nur wissen, ob HKEY_USERES\.DEFAULT\.Network existiert. Alles, was ich beim Suchen finde, scheint hauptsächlich über deren Manipulation zu sprechen, und nimmt an, dass der Schlüssel existiert, da er magisch erzeugt wird, wenn nicht.
Ich habe die Lösung gefunden.
dim bExists
ssig="Unable to open registry key"
set wshShell= Wscript.CreateObject("WScript.Shell")
strKey = "HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Digest\"
on error resume next
present = WshShell.RegRead(strKey)
if err.number<>0 then
if right(strKey,1)="\" then 'strKey is a registry key
if instr(1,err.description,ssig,1)<>0 then
bExists=true
else
bExists=false
end if
else 'strKey is a registry valuename
bExists=false
end if
err.clear
else
bExists=true
end if
on error goto 0
if bExists=vbFalse then
wscript.echo strKey & " does not exist."
else
wscript.echo strKey & " exists."
end if
Die zweite der beiden Methoden macht, was Sie wollen. Ich habe es gerade benutzt (nachdem ich in diesem Thread keinen Erfolg gefunden hatte) und es hat für mich funktioniert.
http://yorch.org/2011/10/two-ways-to-check-if-a-registry-key-exists-using-vbscript/
Der Code:
Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKCU = &H80000001 'HKEY_CURRENT_USER
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Const HKUS = &H80000003 'HKEY_USERS
Const HKCC = &H80000005 'HKEY_CURRENT_CONFIG
Function KeyExists(Key, KeyPath)
Dim oReg: Set oReg = GetObject("winmgmts:!root/default:StdRegProv")
If oReg.EnumKey(Key, KeyPath, arrSubKeys) = 0 Then
KeyExists = True
Else
KeyExists = False
End If
End Function
Einfachste Möglichkeit, RegRead und Fehler beim Umgang mit Fehlern zu vermeiden. Optionale befreundete Consts für die Registrierung:
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
Dann prüfen Sie mit:
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
If oReg.EnumKey(HKEY_LOCAL_MACHINE, "SYSTEM\Example\Key\", "", "") = 0 Then
MsgBox "Key Exists"
Else
MsgBox "Key Not Found"
End If
WICHTIGE HINWEISE FÜR DAS OBEN:
Für den Fall, dass jemand anderes darauf stößt, habe ich WhoIsRichs Beispiel genommen und etwas modifiziert. Beim Aufruf von ReadReg musste ich Folgendes tun: ReadReg ("App", "HKEY_CURRENT_USER\App\Version"), das dann die Versionsnummer aus der Registry lesen kann, falls vorhanden. Ich verwende auch HKCU, da zum Schreiben keine Administratorrechte erforderlich sind.
Function ReadReg(RegKey, RegPath)
Const HKEY_CURRENT_USER = &H80000001
Dim objRegistry, oReg
Set objRegistry = CreateObject("Wscript.Shell")
Set oReg = GetObject("winmgmts:!root\default:StdRegProv")
if oReg.EnumKey(HKEY_CURRENT_USER, RegKey) = 0 Then
ReadReg = objRegistry.RegRead(RegPath)
else
ReadReg = ""
end if
End Function
Siehe den Scripting Guy! Blog:
Wie kann ich feststellen, ob ein Wert in der Registrierung vorhanden ist?
Sie besprechen die Überprüfung auf einem Remotecomputer und zeigen, dass der Schlüssel nicht vorhanden ist, wenn Sie einen Zeichenfolgenwert aus dem Schlüssel lesen und wenn der Wert Null ist (im Gegensatz zu Empty).
Bezüglich der Verwendung der RegRead-Methode, wenn sich der Begriff "Schlüssel" auf den Pfad (oder Ordner) bezieht, in dem die Registrierungswerte gespeichert werden, und wenn die Blattelemente in diesem Schlüssel "Werte" genannt werden, mithilfe von WshShell.RegRead (strKey) bis Erkennen der Schlüsselexistenz (im Gegensatz zur Wertexistenz) Folgendes berücksichtigen (wie unter Windows XP beobachtet):
Wenn strKey name nicht der Name eines vorhandenen Registrierungspfads ist, liest Err.Description "Ungültiger Stamm im Registrierungsschlüssel" ... mit einer Err.-Nummer von 0x80070002.
Wenn strKey einen Registrierungspfad benennt, der kein nachlaufendes "\" enthält, scheint die RegRead-Methode strKey als Pfad-/Wertreferenz und nicht als einfachen Pfadverweis zu interpretieren, und gibt dieselbe Err.Number zurück, jedoch mit einem Err. Beschreibung von "Registrierungsschlüssel kann nicht geöffnet werden". Der Begriff "Schlüssel" in der Fehlermeldung scheint "Wert" zu bedeuten. Dies ist das gleiche Ergebnis, das erhalten wird, wenn strKey auf einen Pfad\Wert verweist, bei dem der Pfad vorhanden ist, der Wert jedoch nicht vorhanden ist.
edit (Entschuldigung, ich dachte du wolltest VBA).
Immer wenn Sie versuchen, einen nicht vorhandenen Wert aus der Registrierung zu lesen, erhalten Sie einen Nullwert zurück. Sie müssen also nur nach einem Nullwert suchen.
Verwenden Sie IsNull
nicht IsEmpty
.
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
strValueName = "Test Value"
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
If IsNull(strValue) Then
Wscript.Echo "The registry key does not exist."
Else
Wscript.Echo "The registry key exists."
End If