1

我在 VB 中有一个代码来查找我已安装的 COM dll 的版本。相关代码是:

Const HKEY_LOCAL_MACHINE = &H80000002
---------
---------
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Classes\Wow6432Node\CLSID\{394B1F33-115C-33E5-A008-36E32C5340D9}\InprocServer32"
strValueName = "CodeBase"
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
---------
---------
strKeyPath = "SOFTWARE\Classes\Wow6432Node\CLSID\{394B1F33-115C-33E5-A008-36E32C5340D9}\Version"
strValueName = "DLLVersion"
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,sValue
Wscript.Echo sValue
---------

当我运行代码时出现错误: Directory\file.vbs(37,1) Microsoft VBScript runtime error: Type mismatch

上面代码中最后一行的第 37 行:

Wscript.Echo sValue

第一个 GetStringValue 工作正常(我用过 InProcServer32) 搜索了很多但不知道如何解决这个问题。

我也尝试使用不同的名称 strValueName。我试过“代码库”。我还尝试使用空字符串来获取默认值。

我还尝试在变量中获取函数的值,如下所示:

set vers=objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,sValue

vres 仅获取版本中主要修订的值。例如,如果版本是 2.4.7.0,那么 vers 的值为 2

4

1 回答 1

1

你误解了它的GetStringValue工作原理。从注册表值读取的数据通过out 参数 sValue返回:

retval = reg.GetStringValue(HKEY_LOCAL_MACHINE, strKeyPath, strValueName, sValue)

如果无法读取数据,则该值设置为Null

方法的返回值

retval = reg.GetStringValue(HKEY_LOCAL_MACHINE, strKeyPath, strValueName, sValue)

是一个整数,指示方法调用是否成功。返回值 0 表示调用成功。非零值意味着出现问题。值 2 特别表示您尝试从中读取的注册表项不存在。

此外,您不得在Set此处使用关键字。该关键字只能在将对象分配给变量时使用。但是,在这种情况下,返回值是原始数据类型(整数)。

于 2013-09-26T12:10:27.403 回答