文章編號: 194801 - 上次校閱: 2005年7月11日 - 版次: 6.2

動態伺服器網頁 (ASP) 傳回 VBScript 執行階段錯誤 '800a01ad'

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

在動態伺服器網頁 (ASP) 中使用 CreateObject 來建立 COM 元件時,可能會出現下列錯誤:
Microsoft VBScript 執行階段錯誤 '800a01ad'
ActiveX 元件無法建立物件
這個錯誤的發生原因,通常是因為 COM 物件所使用的動態連結程式庫 (DLL) 符合下列其中一種狀況:
  • 從系統中遺失
  • 不在系統路徑中
  • 因為安全性設定的關係,系統無法存取

其他相關資訊

上述所有原因同時適用於執行 COM 物件的 DLL,以及任何存在有 DLL 相依性的狀況。例如,如果 COM DLL 靜態連結到 Win32 DLL,而 Win32 DLL 已從系統中遺失,此時就會產生 800a01ad 錯誤。

有許多方法可以判定 DLL 的相依性。其中一種方法就是使用 Depends.exe 工具。這套工具隨附於 Platform Software Development Kit (SDK)、Developer Studio 98 以及與 Visual C++ 一併安裝的 DUMPBIN 公用程式。

您可以從「Microsoft 下載中心」下載下列檔案:

摺疊此圖像展開此圖像
下載
立即下載 Dependsia64version2.1.3623.exe 套件。 (http://download.microsoft.com/download/visualfoxpro7/utility/2.1/w9x2kmexp/en-us/dependsia64version2.1.3623.exe)
摺疊此圖像展開此圖像
下載
立即下載 Dependsx86version2.1.3623.exe 套件。 (http://download.microsoft.com/download/visualfoxpro7/utility/2.1.3623/w9x2kmexp/en-us/dependsx86version2.1.3623.exe)

發行日期:2002 年 6 月 25 日

如需有關如何下載 Microsoft 技術支援檔案的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
119591? (http://support.microsoft.com/kb/119591/ ) How to Obtain Microsoft Support Files from Online Services
Microsoft 已對這個檔案做過病毒的掃描。Microsoft 是利用發佈當日的最新病毒偵測軟體來掃描檔案,看看有沒有病毒感染。檔案會儲存在安全的伺服器上,以避免任何未經授權的更改。 如需有關這個工具的詳細資訊,請造訪下列 Dependency Walker 網站:
http://www.dependencywalker.com (http://www.dependencywalker.com)
Microsoft 提供協力廠商的連絡資訊,以協助您找出技術支援。此連絡資訊若有變更,恕不另行通知。Microsoft 不保證此協力廠商連絡資訊的準確性。

如果要使用 Depends,只要先執行這個工具,再開啟有問題的 DLL 即可。如果要使用 DUMPBIN 來檢視相依性,請在命令提示字元中執行下列命令:dumpbin /IMPORTS <DLL 名稱>。Depends 公用程式的優點是能夠顯示相依性的依存關係。它會顯示出,雖然 Windows 檔案總管的快速檢視能夠顯示相同的資訊,但是顯示的資訊不一定是完整的資訊。

下列提供了每個可能原因的進一步資訊:

DLL 從系統中遺失

執行 COM 物件的 DLL 必須存在於系統上,並且登錄到正確的路徑。建立完全不曾登錄的 COM 物件而造成的失敗狀況,會產生不同的錯誤:
Server object error 'ASP 0177 :800401f3' (伺服器物件錯誤 'ASP 0177 : 800401f3')

如果要確認登錄中的路徑是否正確,請執行 RegEdit 程式並搜尋 PROGID (可在 CreateObject 呼叫中找到)。從 PROGID 項目中,將 CLSID 記錄或複製到剪貼簿,並找到 CLSID 的項目。這個項目應該會包含含有 DLL 路徑的 InprocServer32 機碼。下列是這個程序的流程說明:
(在 asp 檔案中)
set obj = Server.CreateObject("BadComponent.Badguy")

(在 RegEdit 中)
HKEY_CLASSES_ROOT\BadComponent.BadGuy\CLSID
{683DA7E0-5C73-11D2-80F6-0000F87A8236}

HKEY_CLASSES_ROOT\CLSID\{683DA7E0-5C73-11D2-80F6-0000F87A8236}\ 
InprocServer32 E:\Programs\COMPON~1\BADCOM~1\Debug\BADCOM~1.DLL
				

從命令提示字元執行下列命令,可以確認下列這個檔案是否存在:
E:\>cd E:\Programs\COMPON~1\BADCOM~1\Debug
E:\Programs\COMPON~1\BADCOM~1\Debug>dir BADCOM~1.DLL

10/14/98  11:18a               241,739 BadComponent.dll

1 File(s)        241,739 bytes
2,038,755,328 bytes free
				

如果登錄中沒有指定 DLL 路徑,則 DLL 必定位於系統路徑。

COM DLL 可能會有除了靜態連結 Win32 DLL 以外的相依性 (DUMPBIN 及 Depends.exe 會顯示靜態連結的 DLL)。例如,COM 物件可能會呼叫 LoadLibrary() 和 Win32 DLL 中的函式。同樣地,控制項可能會建立包含在不同 DLL 的 COM 物件。這些 DLL 可能會發生遺失、登錄不當,或因為安全性因素而無法存取的狀況。如此會導致建立控制項時可能遇到執行階段錯誤的情形 (也可能不會遇到)。從 ATL 控制項的 FinalConstruct() 方法傳回 S_FALSE,可以模擬在建立控制項時的失敗狀況。這會假設 LoadLibrary() 或 CoCreateInstance() 在 FinalConstruct() 中失敗,而程式設計開發人員選擇檢查這個狀況而傳回 S_FALSE。在這種情況中,會產生類似下列的錯誤:
錯誤 'ASP 0115'
意外的錯誤
/badguy.asp
外部物件上發生一個可截獲的錯誤。指令碼無法
繼續執行。
伺服器物件錯誤 'ASP 0115:8000ffff'

Failure of this type will not generate an 800a01ad error. (這類的失敗不會產生 800a01ad 錯誤)

DLL 不在系統路徑中

系統必須能夠找到 DLL 的相依 DLL (靜態連結),才能執行要建立的 COM 物件。請使用 DUMPBIN 或 Depends,判定哪些是相依 DLL。然後,請確認這些 DLL 都是位於 COM DLL 所在目錄或是系統路徑。

因為安全性設定的關係,系統無法存取 DLL

用戶端向伺服器要求動態伺服器網頁 (ASP) 時,ASP 網頁會在使用驗證方法存取網頁伺服器的安全性環境中執行。例如,匿名要求就是在 IUSR_MACHINENAME 環境中執行,其中 MACHINENAME 是電腦的名稱。如需有關其他驗證方法及安全性注意事項的詳細資訊,請參閱 IIS 說明文件。而如果根據 800a01ad 錯誤來解釋,則這表示驗證的使用者必須具備 (透過 NTFS 檔案權限) COM DLL 及所有相依 DLL 的存取權。

有一個快速的方法可以判定這是不是問題發生的原因。請使用 Windows 檔案總管,選取 COM DLL 的 [內容]、選取 [安全性] 索引標籤,然後設定「每個人」(Everyone) 至少有 DLL 的讀取權限。在相依 DLL 及 DLL 所在的目錄上,執行同樣的動作。這些動作應該會排除任何可能會影響 COM 物件建立的安全性限制。在確定這是問題的原因之後,就可以加強安全性。請記住,許多相依 DLL 都是 Windows 系統 DLL,而且會已經具備至少「每個人都能讀取」的權限。「加強」安全性時,請勿誤將這個權限移除。

(c) Microsoft Corporation 1998, All Rights Reserved.本文內容由 Robert E. Duke, Microsoft Corporation 提供。


這篇文章中的資訊適用於:
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
關鍵字:?
kberrmsg kbprb kbsecurity KB194801
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。