You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBScript调用ScriptControl组件遇创建失败及BTT报错求助

解决VBScript解析JSON时的ScriptControl错误问题

我看到你在尝试用VBScript把JSON字符串转成字典时碰了两个棘手的错误:ActiveX组件无法创建对象: 'ScriptControl' 和 System: 启用BTT后不支持此操作。这俩问题本质上是现代系统对老旧ActiveX控件的限制,再加上第三方工具的冲突导致的,给你几个实用的解决办法:

方法一:改用更兼容的MSXML脚本控件(最推荐)

ScriptControl属于比较老旧的ActiveX组件,现在很多Windows系统(尤其是Win10/11和64位系统)默认禁用了它。换成MSXML的6.0版本脚本控件会靠谱很多,而且是系统自带的组件,兼容性拉满。你可以把原来的JSONToDictionary函数替换成下面这个:

Dim jsonString, jsonDictionary

jsonString = "{ ""name"": ""John"", ""age"": 30, ""city"": ""New York"" }"

Set jsonDictionary = JSONToDictionary(jsonString)

MsgBox(jsonDictionary.Item("name")) ' -> "John"
MsgBox(jsonDictionary.Item("age")) ' -> 30
MsgBox(jsonDictionary.Item("city")) ' -> "New York"

Function JSONToDictionary(jsonString)
    Dim jsControl
    ' 使用MSXML6.0的脚本控件,兼容性更好
    Set jsControl = CreateObject("MSXML2.ScriptControl.6.0")
    jsControl.Language = "JScript"
    ' 用安全的JSON.parse替代eval,避免注入风险
    jsControl.AddCode "function parseJson(str) { return JSON.parse(str); }"
    ' 解析JSON并返回可被VBScript访问的对象
    Set JSONToDictionary = jsControl.Run("parseJson", jsonString)
End Function

方法二:针对64位系统调整脚本宿主

如果你的系统是64位的,默认的wscript.exe/cscript.exe是64位版本,但ScriptControl只有32位的,这就会导致创建对象失败。你可以强制用32位的脚本宿主来运行你的VBS:

  • 找到32位脚本宿主的路径:C:\Windows\SysWOW64\wscript.exe
  • 右键你的VBS文件,选择「打开方式」→「选择其他应用」
  • 点击「更多应用」→「在这台电脑上查找其他应用」,定位到上面的路径
  • 勾选「始终使用此应用打开.VBS文件」,确认后重新运行脚本

方法三:排查BetterTouchTool(BTT)的冲突

第二个错误明确提到了BTT,说明这个工具可能和ScriptControl的调用存在资源冲突或者权限限制。你可以按下面的步骤排查:

  • 先完全退出BTT,然后重新运行你的VBS脚本,如果错误消失,那就是BTT的问题
  • 尝试把BTT更新到最新版本,新版本通常会修复这类兼容性bug
  • 打开BTT的设置面板,找找有没有和「脚本执行」「ActiveX组件访问」相关的选项,尝试关闭或调整这些设置
  • 如果还是不行,可以去BTT的官方社区反馈这个问题,开发者可能会给出针对性的解决方案

另外提醒一句:原来代码里用eval解析JSON存在安全风险,如果你的JSON字符串来自不可信的来源,一定要用JSON.parse替代,既安全又稳定。

内容的提问来源于stack exchange,提问作者Jaime Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:05:18