VBScript / HTA - 使用WMI搜索注册表

时间:2015-02-09 21:01:58

标签: vbscript registry wmi hta

当我尝试从HTA应用程序中运行VBScript代码时,我遇到了一个有趣的问题。具体来说,当我使用WMI查询注册表时。下面是我用来确定SQL服务器安装实例名称的VBscript(.HTA文件内)代码:

<script language="VBScript">
    Sub searchRegistry
        Const HKEY_LOCAL_MACHINE = &H80000002

        strComputer = "."

        Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
        strKeyPath = "Software\Microsoft\Microsoft SQL Server\Instance Names\SQL"
        oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes

        msgbox "SQL Instances already installed: "
        For i=0 To UBound(arrValueNames)
            msgbox arrValueNames(i)     
        Next
    End Sub

返回Null并且循环抛出绑定错误。但是,当我从独立的VBScript(.vbs)文件运行相同的代码时,它返回正确的值没有问题。我认为这是一个权限问题,但不知道从哪里开始;不知道如何授予Windows HTA文件使用WMI搜索注册表的权限。此外,我能够使用HTA的WMI做其他事情(获取驱动器空间等)而没有问题,所以它必须是注册表限制?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

根据 this ,Windows允许HTA更新注册表。

如果它对您不起作用,则可能与您的“用户帐户控制”相关。设置。禁用并尝试!

答案 1 :(得分:0)

经过几天的劳累,我已经明白了......

在某些64位系统上,HTA与32位MSHTA版本(%windir%\ SYSWOW64 \ mshta.exe)错误关联 - 导致只能访问某些WMI类。

在这种情况下,将正确的(64位)MSHTA路径添加到命令行。示例:&#34;%windir%\ system32 \ mshta.exe&#34; &#34; C:\ whatever.hta&#34;并且HTA应该以完全访问WMI的方式运行。