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