2

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

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

这是代码:

'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
4

1 回答 1

1

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

  1. 您进行了设置option explicit,以便在遇到未声明的变量时,解释器将引发错误。
  2. 在到达第一个未声明的变量之前entry,您使用 关闭错误处理on error resume next
  3. 然后你遇到entry并引发错误,但没有报告。
  4. 执行恢复,未声明的变量错误由select case语句解释。所以keyExists总是返回false

entry通过在尝试使用它之前声明来解决问题:

dim entry : entry = objShell.regRead(key)
于 2012-05-22T15:39:35.250 回答