【发布时间】:2013-09-26 08:40:55
【问题描述】:
我在 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。我试过“代码库”。我也尝试使用空字符串来获取默认值。
我也试过在一个变量中获取函数的值,如下:
set vers=objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,sValue
vres 仅获取版本中主要修订的值。例如,如果版本是 2.4.7.0,那么 vers 的值为 2
【问题讨论】:
-
不记得我上次写脚本是什么时候了,但是你检查过 sValue 是否为 Null 吗?路径存在吗?
-
@DavidSdot,检查过并且 sValue 为空。我认为路径很好,因为在将结果分配给 vers(在问题的最后部分提到)时,我得到了版本的主要修订。
-
好的,你试过GetExpandedStringValue吗?或其他方式什么是 DLLVersion 的类型
-
而你在 vers var 中得到的值实际上是 GetStringValue 返回的错误码!
-
没有试过GetExpandedStringValue。会调查的。 DLLVersion 只是我赋予变量 strValueName 的字符串值。坦率地说,不明白它是如何使用的。
标签: vb.net vbscript wmi type-mismatch clsid