确定函数调用是否成功的最佳方法

时间:2015-11-12 23:43:16

标签: string replace vbscript registry

考虑以下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

  • 在VBScript中,如果引发Err,是否会跳过整行,或者内部调用是否会向外部Replace()函数返回NULL或某个未定义的值?
  • 如果是后者,Replace()函数是否也会引发错误,还是只返回NULL或其他什么?
  • Err.Number来电或RegRead()来电,Replace()是失败代码吗?
  • strPath的价值是多少?它是一个空字符串,未经修改,还是未定义?
  • 测试空字符串的最佳方法是什么?是If strPath = ""IsEmpty(strPath)等效声明吗?

基本上,如果我在VBScript中使用这个构造,那么简单地检查Err.Number的值是否安全?或者我需要测试结果字符串?或两者兼而有之?

我试图在我的代码中不要过于冗长,但从更广泛的意义上说,我想了解VBScript如何处理这些事情。

1 个答案:

答案 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)