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 に答える