經典 ASP 應用呼叫 Server.CreateObject 實例化 COM 元件時,若回傳 錯誤 'ASP 0178 : 80070005' Server.CreateObject 存取被拒絕,通常是 **COM 元件啟動權限** 或 **註冊表機碼存取權限** 未授予 IIS 執行身分。
Server object error 'ASP 0178 : 80070005'
Server.CreateObject Access Denied
/xxx.asp, line N
Call to Server.CreateObject failed while checking permissions.
Access is denied to this object.
regedit。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\AppPatch\v2.0.50727.00000HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\... 同路徑機碼權限。iisreset。| 可能原因 | 檢查/解決 |
|---|---|
| COM 元件未註冊 | regsvr32 xxx.dll 註冊,或 regsvr32 /u 解除重註冊 |
| DCOM 啟動權限 | dcomcnfg → 元件服務 → 電腦 → 我的電腦 → DCOM 設定 → 該元件 →「安全性」→「啟動及啟動權限」→ 編輯 → 加入 IIS_WPG/IIS_IUSRS → 允許「本機啟動」「本機啟動」 |
| 元件身分設定 | DCOM 設定 →「身分」→ 選「互動式使用者」或指定具權限的服務帳號 |
| 檔案系統權限 | 元件 DLL/OCX 檔案 →「安全性」→ IIS_WPG/IIS_IUSRS 讀取/執行 |
| 依賴 DLL 缺失 | depends.exe (Dependency Walker) 檢查元件相依性 |
重現呼叫 Server.CreateObject("ProgID") 的 ASP 頁面,應不再拋出 0178 錯誤。
核心原則:**IIS 執行身分 (IUSR/IIS_WPG/IIS_IUSRS) 必須擁有 COM 元件註冊表機碼讀取權限、DCOM 啟動權限、元件檔案讀取權限** 三者缺一不可。