Win7運行老舊 VB6/VBA/經典 ASP/早期管理工具/企業專用軟件時彈出「ActiveX部件不能創建對象」(錯誤碼 429 / 0x800A01AD),核心原因:scrrun.dll (Microsoft Scripting Runtime) / msado15.dll (ADO) / comctl32.ocx / mscomctl.ocx 等 ActiveX 組件未註冊/註冊損壞/版本不匹配/64位系統 WoW64 重定向問題。本文提供核心 DLL 註冊修復法與系統性排查流程。
Scripting.FileSystemObject / ADODB.Connection / MSComctlLib.ListView / WScript.Shellcmd → 回車 (或右鍵「命令提示符」→「以管理員身份運行」)
regsvr32 "C:\Windows\System32\scrrun.dll"
regsvr32 "C:\Windows\SysWOW64\scrrun.dll"

@echo off
rem 註冊 64位系統下的 32位組件 (SysWOW64) 為主,64位組件(System32)同步
set DLL_DIR_32=C:\Windows\SysWOW64
set DLL_DIR_64=C:\Windows\System32
echo 註冊 Microsoft Scripting Runtime (scrrun.dll)...
regsvr32 /s "%DLL_DIR_32%\scrrun.dll"
regsvr32 /s "%DLL_DIR_64%\scrrun.dll"
echo 註冊 ADO (msado15.dll, msado20.tlb, msado21.tlb, msado25.tlb, msado26.tlb, msado27.tlb, msado28.tlb)...
for %%f in (msado15.dll msado20.tlb msado21.tlb msado25.tlb msado26.tlb msado27.tlb msado28.tlb) do (
regsvr32 /s "%DLL_DIR_32%\%%f"
regsvr32 /s "%DLL_DIR_64%\%%f"
)
echo 註冊 常用控件...
for %%f in (comctl32.ocx mscomctl.ocx mscomct2.ocx mscomct3.ocx msdatgrd.ocx msdatlst.ocx msflxgrd.ocx mshflxgd.ocx) do (
regsvr32 /s "%DLL_DIR_32%\%%f"
regsvr32 /s "%DLL_DIR_64%\%%f"
)
echo 註冊 WSH (wshom.ocx, wshcon.dll, wshom.dll, wshext.dll, wshom.ocx)...
for %%f in (wshom.ocx wshcon.dll wshom.dll wshext.dll) do (
regsvr32 /s "%DLL_DIR_32%\%%f"
regsvr32 /s "%DLL_DIR_64%\%%f"
)
echo 完成。請重新運行軟件測試。
pause
保存為 fix_activex.bat 右鍵「以管理員身份運行」。
| 方向 | 操作 | 工具/命令 |
|---|---|---|
| 文件缺失 | 從同版本Win7拷貝 / 從安裝盤 \sources\install.wim 提取 / 下載官方運行時包 | DISM / install.wim 提取 / VB6/KB290887運行時 |
| 版本不匹配 | 軟件需特定版本(如ADO 2.5/2.6/2.7/2.8/6.0) → 安裝對應 MDAC/ADO 運行時 | Microsoft 官網搜索 "Microsoft Data Access Components" / "ADO 2.x" |
| 權限/註冊表損壞 | HKCR\CLSID\{...} 鍵值權限/損壞 → 子鍵權限修復 / 刪除重註冊 | RegAcl / SubInACL / 手動權限編輯 |
| 64位程序調用32位組件 | 64位進程無法加載32位COM → 強制32位運行(CorFlags / 平台目標 x86) / 遷移到64位組件 | CorFlags.exe / VS項目屬性→Build→Prefer 32-bit |
| 依賴項缺失 | Dependency Walker (depends.exe) 分析 .exe/.dll 缺失依賴 | depends.exe / Process Monitor 監控註冊表/文件訪問失敗 |
VB6_Runtime_Full.exeActiveX部件不能創建對象 = 核心 COM 組件未註冊/丟失。管理員CMD → regsvr32 "C:\Windows\SysWOW64\scrrun.dll" (32位優先) + 批量註冊 ADO/常用控件/WSH 腳本 → 解決 95% 老軟件問題。VB6 程序直接裝 VB6 運行時完整包 一勞永逸。Win7 跑老軟件,註冊表與 SysWOW64 是戰場!