使用GetStringValue fn时键入不匹配错误

时间:2013-09-26 08:40:56

标签: vb.net vbscript wmi type-mismatch clsid

我在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运行时错误:类型不匹配

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

Wscript.Echo sValue

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

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

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

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

vres仅获取版本中主要修订版的值。例如,如果版本是2.4.7.0,则vers具有值2

1 个答案:

答案 0 :(得分: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关键字。只有在将对象分配给变量时才能使用该关键字。但是,在这种情况下,返回值是原始数据类型(整数)。