当“option explicit”设置时,检查注册表项的VBScript不起作用

时间:2012-05-22 15:31:58

标签: vbscript registry

好的,我在这里的第一篇文章,所以希望我不要搞得太糟糕,把整个互联网放在我身上......

我有一个简单的函数来检查是否存在注册表项。它按照我的预期工作,直到我设置“选项显式”。然后它没有。没有错误,它只是没有返回正确的值,我无法弄清楚为什么。毫无疑问,这是一个愚蠢的错误,当你们都指出它是多么愚蠢时,我很可能会羞愧地离开,但是只要你告诉我我先做错了什么,那就值得了。

以下是代码:

'option explicit

if keyExists("HKEY_CURRENT_USER\Software\WritingInCode\Company\CreateCabinetDB\") then
    wscript.echo "Key exists"
else
    wscript.echo "Key doesn't exist"
end if

function keyExists(key)
    dim objShell : set objShell = createObject("WScript.Shell")

    on error resume next

    entry = objShell.regRead(key)

    select case err.number
        case 0: keyExists = true
        case else: keyExists = false
    end select

    err.clear

    set objShell = nothing
end function

1 个答案:

答案 0 :(得分:1)

好的,这是正在发生的事情。

  1. 设置option explicit以便在遇到非声明变量时,解释器会引发错误。
  2. 在您到达第一个未声明的变量entry之前,您可以使用on error resume next关闭错误处理。
  3. 然后您遇到entry并引发错误,但未报告。
  4. 执行恢复,非声明变量错误由select case语句解释。因此keyExists始终返回false
  5. 在尝试使用entry之前声明dim entry : entry = objShell.regRead(key) 来解决问题:

    {{1}}