当我尝试从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做其他事情(获取驱动器空间等)而没有问题,所以它必须是注册表限制?有什么想法吗?
答案 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的方式运行。