wally_davis
asked on
VBScript RegRead Function is not working as expected
I have a simple function whereby I pass in the name of a Registry Key Path.
I have a const variable of HKLM = &H80000002.
I'm passing in the following Check on this path:
sKeyPath = "SYSTEM\CurrentControlSet\ Services\E ventlog"
I just want to check to make sure that the "Eventlog" folder exists and that's it.
When I make the function call I've tried passing in the following different parameters:
If regKeyExists(sKeyPath) and If regKeyExists(HKLM & "\" & sKeyPath)
I'm getting this error and it's driving me nuts. I'm not sure what else it could be:
-2147024894
Please see code below.
Thanks Experts,
Wallace
I have a const variable of HKLM = &H80000002.
I'm passing in the following Check on this path:
sKeyPath = "SYSTEM\CurrentControlSet\
I just want to check to make sure that the "Eventlog" folder exists and that's it.
When I make the function call I've tried passing in the following different parameters:
If regKeyExists(sKeyPath) and If regKeyExists(HKLM & "\" & sKeyPath)
I'm getting this error and it's driving me nuts. I'm not sure what else it could be:
-2147024894
Please see code below.
Thanks Experts,
Wallace
Function regKeyExists(Key)
On Error Resume Next
Dim oShll, rKey
Set oShll = CreateObject("WScript.Shell")
rKey = oShll.RegRead(Key)
MsgBox Err.Number
If Err.Number <> 0 Then
Err.Clear
regKeyExists = False
Else
Err.Clear
regKeyExists = True
End If
Set oShll = Nothing
End Function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Ok, I tried you're suggestions and to no avail. I'm doing some checking on the value that gets pass in to the Key variable (the parameter) in the Function regKeyExists(Key). I've tried prefixing the path sKeyPath = "SYSTEM\CurrentControlSet\ Services\E ventlog\" with the the string of "HKLM" and the actual const variable where HKLM = &H80000002. So, it could look like one of the two prior to passing it in to the Function:
1. If regKeyExists(HKLM & "\" & sKeyPath & "\") Then OR
2. If regKeyExists("HKLM\" & sKeyPath & "\") Then
In the function itself I've displayed the value in the "Key" variable parameter to equate to this:
rKey = oShll.RegRead(Key)
So, var Key contains the Value "-2147483646\SYSTEM\Curren tControlSe t\Services \Event Archiver Service" as it gets passed into this Key variable. After that, the rKey = Empty and the error I get is still -2147024894.
1. If regKeyExists(HKLM & "\" & sKeyPath & "\") Then OR
2. If regKeyExists("HKLM\" & sKeyPath & "\") Then
In the function itself I've displayed the value in the "Key" variable parameter to equate to this:
rKey = oShll.RegRead(Key)
So, var Key contains the Value "-2147483646\SYSTEM\Curren
Reg Read does not require any Hex constant values. It only requires the standard user friendly string value of HKLM or HKCU, etc.
So, pass the value like this:
sKeyPath = "HKLM\SYSTEM\CurrentContro lSet\Servi ces\Event Archiver Service\"
If regKeyExists(sKeyPath) Then
Regards,
Rob.
So, pass the value like this:
sKeyPath = "HKLM\SYSTEM\CurrentContro
If regKeyExists(sKeyPath) Then
Regards,
Rob.
sKeyPath = "HKLM\SYSTEM\CurrentControlSet\Services\Event Archiver Service\"
If regKeyExists(sKeyPath) Then
MsgBox "Exists"
Else
MsgBox "Does not exist"
End If
Function regKeyExists(Key)
On Error Resume Next
If Right(Key, 1) <> "\" Then Key = Key & "\"
Dim oShll, rKey
Set oShll = CreateObject("WScript.Shell")
rKey = oShll.RegRead(Key)
'MsgBox Err.Number
If Err.Number <> 0 Then
Err.Clear
On Error GoTo 0
regKeyExists = False
Else
Err.Clear
On Error GoTo 0
regKeyExists = True
End If
Set oShll = Nothing
End Function
As I mentioned in my first post, you need:
regKeyExists("HKLM\SYSTEM\ CurrentCon trolSet\Se rvices\Eve ntlog\")
~bp
regKeyExists("HKLM\SYSTEM\
~bp
LOL! Yes, that's true.
ASKER
One last note guys, bp and Rob, you've both been a tremendous help.
I ran into one other snag. Let's say I have a KeyPath whose value is equal to:
HKLM\SYSTEM\CurrentControl Set\Servic es\Wallace s Key\".
Note the space in the last key "Wallaces Key". When I pass this in, it gives me an error of
-2147024894. I think this might have something to do with the fact the Key has a space (or could have multiple spaces). I tried passing the Key in with double quotes like this and it still fails when passed to the Function --> regKeyPath("""" & "HKLM\" & sKeyPath & "\" & """").
I'm sure there's a way through this problem. I just haven't found the fix for it. Thanks guys!
I ran into one other snag. Let's say I have a KeyPath whose value is equal to:
HKLM\SYSTEM\CurrentControl
Note the space in the last key "Wallaces Key". When I pass this in, it gives me an error of
-2147024894. I think this might have something to do with the fact the Key has a space (or could have multiple spaces). I tried passing the Key in with double quotes like this and it still fails when passed to the Function --> regKeyPath("""" & "HKLM\" & sKeyPath & "\" & """").
I'm sure there's a way through this problem. I just haven't found the fix for it. Thanks guys!
ASKER
While I was thinking (ya, I know, dangerous huh) I'm also wondering if the Error Number of
-2147024894 is just another way of saying "This Subkey does not exist and this is the error I'm giving you as a result."
If you look at the function below, I get on of two values returned to the variable "rKey".
I get either a double-quote ("") and a Error Number of 0 if the Key exists or the var "rKey" will get "Empty" returned to it and an Error Number of -2147024894. Your experiences or thoughts on how you would handle it?
-2147024894 is just another way of saying "This Subkey does not exist and this is the error I'm giving you as a result."
If you look at the function below, I get on of two values returned to the variable "rKey".
I get either a double-quote ("") and a Error Number of 0 if the Key exists or the var "rKey" will get "Empty" returned to it and an Error Number of -2147024894. Your experiences or thoughts on how you would handle it?
Function regKeyExists(Key)
On Error Resume Next
Dim oShll, rKey
Set oShll = CreateObject("WScript.Shell")
rKey = oShll.RegRead(Key)
MsgBox Err.Number
If Err.Number <> 0 Then
Err.Clear
On Error Goto 0
regKeyExists = False
Else
Err.Clear
On Error Goto 0
regKeyExists = True
End If
End Function
ASKER
Ah crap, I'm getting ahead of myself. I completely forgot that the key "HKLM\SYSTEM\CurrentContro lSet\Servi ces\Wallac es Key\" does exist and I'm still getting the Error Number of -2147024894 returned to me so I'm still trying to figure out why.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
If you're on Windows Vista or 7, try running the script as Administrator. You can do this by making a batch file with
wscript "C:\Temp\RegReadTest.vbs"
and then right click the batch, and Run As Administrator.
Rob.
wscript "C:\Temp\RegReadTest.vbs"
and then right click the batch, and Run As Administrator.
Rob.
Agreed, spaces are not a problem.
~bp
~bp
ASKER
Problem was two-fold. I needed a trailing backslash added to my code and it was also a permissions issue on the specific Server I was testing against. Thanks Bill and Rob!
Regards,
Rob.
Open in new window