某些注册表项不返回值 VB6



我正在尝试找出是否安装了SQL Server 2012本机客户端驱动程序。 我被告知检查此注册表项

HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerSQLNCLI11CurrentVersion

其中,VERSION 的值名称将具有一个值,表示它已安装。

当我调用 API 时

If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then
     Exit Function
End If

哪里

    hkey=&H80000002
    KeyName=SOFTWAREMicrosoftMicrosoft SQL ServerSQLNCLI11CurrentVersion

它返回一个错误,就像找不到密钥一样。我已经用其他键进行了测试,它可以很好地打开它们。 起初我以为是因为"Microsoft SQL Server"中的空格,事实并非如此。我可以很好地看到注册表中的密钥。

在 VB6 中,该数字&H80000002显示为 -2147483646 。任何非零值都将被视为True,因此只要它是非零值,您就会始终Exit Function。拥有这种类型的逻辑通常不是一个好主意If X Then ...

建议:

If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle)=0 Then
     Exit Function
End If

编辑:重新阅读您的帖子后,我对问题所在感到有些困惑。是运行时错误还是只是逻辑没有做它应该做的事情?

最新更新