在 Win7 執行 regsvr32 xxx.ocx 或 regsvr32 xxx.dll 註冊 COM 元件時,彈出錯誤:
模組 "xxx.ocx" 已載入,但對 DllRegisterServer 的呼叫失敗,錯誤代碼 0x80004005。
這是典型的 UAC (使用者帳戶控制) 權限不足 導致。Win7 預設即使是管理員群組使用者,命令提示字元也不具備完整提升權限,導致寫入 HKCR、HKLM 登錄區失敗。解決方法極簡單:以系統管理員身分開啟命令提示字元 再執行註冊指令。
cmd → 在搜尋結果 cmd.exe 上按右鍵 → 選擇 「以系統管理員身分執行」。regsvr32 "完整路徑\檔案名.ocx" # 範例: regsvr32 "D:\Components\MSCOMCTL.OCX" # 註冊 DLL 同理: regsvr32 "C:\Windows\SysWOW64\msxml3.dll"
注意: 路徑含空白時必須用雙引號括起。64 位元系統註冊 32 位元元件時,請使用 C:\Windows\SysWOW64\regsvr32.exe (WoW64 子系統)。
建立批次檔 register_all.bat (以系統管理員身分執行):
@echo off
for %%f in (*.ocx *.dll) do (
echo 正在註冊 %%f ...
regsvr32 /s "%%f"
)
pause
/s 參數為靜默模式 (不彈出成功對話框),適合大量註冊。
| 現象 | 原因與解決 |
|---|---|
| 提示「模組找不到」/ "LoadLibrary 失敗" | 路徑錯誤、檔案不存在、相依 DLL 缺失 (用 Dependency Walker 檢查)、32/64 位元不匹配 |
| 提示「存取被拒絕」 | 未以系統管理員身分執行、檔案唯讀屬性、防毒軟體攔截、系統檔案保護 (SFC) 阻擋 |
| 64 位元系統註冊 32 位元元件失敗 | 必須用 %windir%\SysWOW64\regsvr32.exe 而非預設 64 位元 regsvr32 |
| 註冊成功但程式仍報錯 | 元件版本不符、C++ 執行階段缺失 (安裝 VC++ Redistributable)、.NET Framework 版本問題 |
Win7/Vista/8/10/11 皆採用 UAC 機制,「管理員群組」≠「完整提升權限」。所有需寫入 HKLM、HKCR、Program Files、Windows 目錄的操作 (含 regsvr32、安裝軟體、修改系統設定),必須「以系統管理員身分執行」。養成此習慣,可避免 90% 權限相關錯誤。