考虑以下VBScript示例,该示例从注册表中读取值并将相对路径字符串转换为绝对路径字符串:
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
strPath = Replace(objShell.RegRead(someRegKey),"\relative path","\\?\Absolute path",1,-1,1)
确定对RegRead()
的调用是否成功的最佳方法是什么?我知道如果注册表项不存在,RegRead()
将引发Err
。
Err
,是否会跳过整行,或者内部调用是否会向外部Replace()
函数返回NULL或某个未定义的值?Replace()
函数是否也会引发错误,还是只返回NULL或其他什么?Err.Number
来电或RegRead()
来电,Replace()
是失败代码吗?strPath
的价值是多少?它是一个空字符串,未经修改,还是未定义?If strPath = ""
和IsEmpty(strPath)
等效声明吗?基本上,如果我在VBScript中使用这个构造,那么简单地检查Err.Number
的值是否安全?或者我需要测试结果字符串?或两者兼而有之?
我试图在我的代码中不要过于冗长,但从更广泛的意义上说,我想了解VBScript如何处理这些事情。
答案 0 :(得分:2)
最好的方法是首先不要使用RegRead
(或嵌套的函数/方法调用)。使用WMI(它将为您提供实际的返回代码)并将注册表读取与替换操作分开:
Const HKCU = &H80000001
Const HKLM = &H80000002
Set reg = GetObject("winmgmts://./root/default:StdRegProv")
hive = HKLM
key = "SOFTWARE\foo"
valueName = "bar"
rc = reg.GetStringValue(hive, key, valueName, value)
If rc <> 0 Then
WScript.Echo "Error reading " & key & "\" & valueName & ": " & rc
WScript.Quit 1
End If
strPath = Replace(value, "\relative path", "\\?\Absolute path", 1, -1, 1)