【问题标题】:Type mismatch error while using GetStringValue fn使用 GetStringValue fn 时出现类型不匹配错误
【发布时间】: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


【解决方案1】:

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

retval = reg.GetStringValue(HKEY_LOCAL_MACHINE, strKeyPath, strValueName, <b>sValue</b>)

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

方法的返回值

<b>retval</b> = reg.GetStringValue(HKEY_LOCAL_MACHINE, strKeyPath, strValueName, sValue)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多