1,癥狀:
試圖運行一個使用 Server.CreateObject 執行個體化一個 ActiveX 組件的活動伺服器頁面 (ASP) 頁時出現以下錯誤訊息:
伺服器對象錯誤 ASP 0177:80040154
Server.CreateObject 失敗
/<path>/<yourasp.asp><line # >
Server.CreateObject 調用失敗。無法建立請求的對象執行個體。
2,原因
下面是一些典型產生此錯誤的原因:
- 未正確註冊您的控制項。
- 在"記錄使用者"--通常匿名帳戶--沒有足夠的許可權運行該控制項。在許多情況下 (IUSR_ <machine>) 上的匿名登入帳戶不具有適當的許可權,某些目錄/檔案或特定的組件和它的依賴項。同時小於頻繁如果某些項在註冊表的使用權限設定不正確,它會導致該控制項初始化失敗。
- 在"每個人"組已從具有讀某些登錄機碼由於錯誤的概念的許可權的所有人意味著任何人都時實際上它只是說明域/電腦上的所有已驗證的使用者。
- 在一個檔案資料庫訪問或 $ FoxPro,如的情況下包含資料庫檔案目錄不提供足夠的許可權為已經過身分識別驗證的使用者。
3,解決
警告: 的以下假定熟悉 Internet 資訊服務器和 $ 編輯註冊表。它總是建議您備份註冊表之前以進行任何更改。
由於此錯誤是不正確的使用權限設定對檔案或註冊表設定與相關聯,您必須完成以下步驟:
- 找出已驗證使用者是誰。若要確定哪些使用者進行身分識別驗證,您 ASP 的頂部添加下面的字碼頁:
<% Response.Write("LOGON_USER: " & _ Request.ServerVariables("LOGON_USER")) %>
在 LOGON_USER 為空白,如果您經過身分識別驗證作為 IUSR_machine。否則,在 LOGON_USER 顯示 <domain\user> 已驗證身份的使用者試圖建立該對象的使用者的名稱。
- 確認已驗證使用者 (或組) 具有在所需的目錄、 檔案,和登錄機碼的許可權。這要求在目錄、 檔案,和特定於控制項的登錄機碼的知識。下面是 ActiveX 資料對象的要求的列表。
回到頂端
ADO 特定案例的檔案/目錄許可權
\InetPub - IUSR_<machine> READ \InetPub\wwwroot - IUSR_<machine> READ \Program Files\Common Files\System\ADO - IUSR_<machine> READ \Program Files\Common Files\System\OLE DB - IUSR_<machine> READ \Program Files\Common Files\ODBC\Data Sources -IUSR_<machine> READ \WinNT - IUSR_<machine> CHANGE \WinNT\System32 - IUSR_<machine> READ \WinNT\System32\Inetsrv\Asp - IUSR_<machine> READ \WinNT\System32\Inetsrv\Asp\Cmpnts - IUSR_<machine> READ \WinNT\Temp - IUSR_<machine> CHANGE
回到頂端
ADO 特定案例的註冊表許可權
確保下列鍵上設定以下許可權:
許可權:
<machine>\Administrator - Full Control Creator Owner - Full Control Everyone - READ INTERACTIVE - Special Access (Query Value, Set Value, Create Subkey, Enumerate Subkeys, Notify, Delete) SYSTEM - Full Control
密鑰:
HKEY_CLASSES_ROOT \LICENCES \CEDD4F80-B43C-11cf-837C-00AA00573EDE HKEY_CLASSES_ROOT \ADODB.Command \ADODB.Connection \ADODB.Parameter \ADODB.Recordset
回到頂端
檔案和檔案夾許可權的資料庫大小寫
請確保資料庫檔案和檔案夾包含了資料庫檔案提供了經過身分識別驗證的使用者或組的讀取、 寫入,和執行許可權。
4,更多:
常規問題步驟
- 如果 ASP 已正確安裝通過運行"ADO 使用 Server.CreateObject"樣本複選了"活動伺服器頁面 Roadmap\More samples 子檔案夾"
- 請確保所有的 dll 中註冊的 Regsvr32。
- 請確保沒有註冊 DLL 和登錄機碼指向正確的多個版本。
- 請確保任何 dll 使用Apartment 執行緒模式和不是單線程 (下面參見注釋 3)。
- 請確認主網域控制站 (PDC) 為每個人授予從網路訪問此電腦"許可權。如果 IIS 是一個 PDC 確保 IUSR_ <machine>還具有這些許可權還在本地登入"許可權。
回到頂端
快速許可權檢查步驟
- 通過清除基本和 NT 質詢和響應 (NTCR) 在 IIS 服務管理員中強制匿名
- 若要查看是否它使一個差異Administrator 群組暫時添加 IUSR_ <machine>。如果是這樣,問題是許可權問題。
- 開啟 NT 審核 (如下所述),然後重試。
回到頂端
不 So 快速許可權檢查步驟
- 強制通過清除基本和 NT 質詢和響應 (NTCR) 在 IIS 服務管理員中的匿名。
- 建立一個新的名為 IUSR_Test 的 NT 使用者帳戶。
- 給出了 IUSR_Test 的根磁碟機完全控制,並且一直向下層疊這些許可權。以後,IUSR_Test 刪除,從而將它們從任何目錄或檔案中刪除。
- 開啟 NT 審核 (如下所述),然後重試。
啟用 NT 審核,請執行下列操作:
若要啟用審核,開啟使用者管理員並選擇"審核"從策略"菜單。選擇"檔案和對象訪問"故障。開啟"Windows NT 資源管理員",然後選擇您的硬碟的根目錄。用滑鼠右鍵單擊,然後選擇"屬性。選擇安全選項卡,然後按審核按鈕。添加感興趣 (由 ASP 頁或 IUSR_machine 返回其中) 的使用者並選擇所有失敗複選框。請確保將這些設定應用到所有檔案夾。使用"事件檢視器"來查看 (在日誌菜單中選擇"安全性") 的任何訪問失敗。請確保您關閉審核完成後變更。
注意 2: Jet 使用 SYSTEM TEMP 和 TMP 環境變數指定 JET 操作過程中建立的臨時檔案的位置。預設情況下這些環境變數為使用者定義的而不是系統範圍的設定。這些設定可以執行兩個操作之一。
選項 1。在將 autoexec.bat 中添加類似於以下兩行:
Set TEMP=C:\Temp Set TMP =C:\Temp
選項 2。按右鍵我的電腦:
- 單擊屬性,選擇環境 TAB。
- 單擊系統變數列表框 (在上一個) 中的條目。
- 在變數和值編輯控制項中鍵入以下:
Variable = Temp Value = C:\Temp
- 單擊設定。您將現在,請參閱 TEMP 已添加到列表中的系統變數。
- 重複該過程為 TMP 變數。
- 重新啟動電腦使更改生效。
此外,已找到 IUSR_ <machine>需要更改到 WinNT 目錄使用 Access 資料庫驅動程式時建立臨時檔案的許可權。
注 3: 預設情況下 ASP 建立單一執行緒 Apartment的用戶端這意味著只有單一執行緒 Apartment inproc 伺服器可由 IIS 傳遞所需的安全上下文。所有其他執行緒模式在系統上下文中運行。這意味著,使用單執行緒模式的 DLL 中安全內容相關的系統,而不是預期將啟動已驗證使用者身份