IIS問題,HTTP 500錯誤解決辦法! 上網搜尋了一下,發現還有一個目錄要給使用者IUSR_QIUYISTUDIO有寫的許可權的,就是%SystemRoot%\Temp(即預設安裝系統情況下的C:\Windows\Temp)目錄,我的天,ASP.NET的許可權問題也是要給這個臨時目錄許可權,現在ASP的也是。問題得以解決!! 最近想自己做個網站,在自己的機器上裝IIS的時候,卻發現不能瀏覽ASP頁面,HTM和HTML的靜態網頁都沒問題,百度了N多,網上也是眾說芬芸,或許是他們碰到的問題都不一樣,解決方案也都不一樣吧。現在我把一些常見的IIS錯誤列出,集思廣益,希望對跟我碰到類似問題的朋友可以少走一些彎路,IIS http 500錯誤大致有以下幾種情況(當然前提是去掉 “ internet選項->進階->顯示友好HTTP錯誤資訊”前面的勾,這樣才可以看到,否則只是提示HTTP500錯誤,看不到其他任何詳細資料): 第一種情況: Active Server Pages 錯誤 "ASP 0201" 無效的預設指令碼語言 為此應用程式指定的預設指令碼語言無效。 第二種情況: -2147467259 (0x80004005) 第三種情況: Server Application Error The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance. HTTP500內部伺服器錯誤解決辦法(這是我個人所用的解決方案,系統是winxp sp2): 1、刪除“internet資訊服務(IIS)”, 2、重啟機子,按F8進入“安全模式”, 3、在安全模式下將“C:\Inetpub”、“c:\windows\iis6.log”、“c:\windows\system32\inetsrv”這幾個東西刪除。 4、重啟機子,在正常模式下安裝“internet資訊服務(IIS)”。 5、看看事件檢視器裡有沒有關於msdtc的錯誤,如果有,運行msdtc -uninstall卸載,再運行msdtc -install安裝,再運行net start msdtc運行msdtc服務,在事件檢視器裡應該可以看到msdtc服務已經正常啟動了。 6、開啟“internet資訊服務(IIS)”,“重新啟動IIS”。 7、這些裝完之後,可能還會看到類似伺服器無法載入應用程式 LM/W3SVC/1/ROOT。錯誤是 '沒有註冊類別',這一項在事件檢視器裡經常可以看到。 cd %windir%\system32\inetsrv rundll32 wamreg.dll, CreateIISPackage regsvr32 asptxn.dll 重起機器,我的問題到這步已經可以完美解決!遇到這個問題,我是GHOST了N多遍,baidu了N多資料,才好不容易解決。 如果還是不行,請再繼續: 運行cmd,然後 regsvr32 /u scrrun.dll regsvr32 scrrun.dll regsvr32 vbscript.dll (註:這個命令修複java指令碼相關的動態連結程式庫) regsvr32 jscript.dll (註:這個命令修複vb指令碼相關的動態連結程式庫) regsvr32 %windir%\system32\inetsvr\asp.dll 在iis--預設網站--主目錄--應用程式保護--選擇低(iis進程),就可以瀏覽動態網頁 重新啟動一下IIS,錯誤應該就解決了 還有一種可能就是裝了360安全衛士的朋友,最近已測明某些流氓軟體檢測到機器上安裝360安全衛士後即惡意破壞系統。 現360放出修複工具,請中招的朋友用fixer修複工具修複。 360Safe上面的相關文章(用下面網站下載fixer) http://bbs.360safe.com/viewthread.php?tid=31134 http://bbs.360safe.com/viewthread.php?tid=39252 網上還流傳有好多種,有很多我沒碰到過,未經證實,下面列出來,有興趣的朋友可以試試: 單擊開始,指向程式,指向管理工具,然後單擊 Internet 資訊服務。 在主控台樹狀目錄中,單擊預設 Web 網站。在顯示窗格中,按右鍵 預設 Web 網站,然後單擊屬性。 在目錄安全性選項卡的匿名訪問和身分識別驗證控制中,單擊編輯。 在驗證方法屬性頁面中,單擊去掉匿名訪問的勾。 HTTP500內部伺服器錯誤,如果是COM+問題的解決辦法。 在事件檢視器裡應該可以看到com+問題 以下為重新安裝COM+的方法: 此為原文(英文): How do I clean up a damaged COM+ catalog in Windows 2000? To clean up a damaged COM+ catalog: 01. Rename %SystemRoot%\System32\Clbcatq.dll to %SystemRoot%\System32\~Clbcatq.dll, making sure that you include the tilde (~). 02. Shutdown and restart your computer. 03. Delete the COM3 sub-key from the registry at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft. 04. Open a CMD.EXE prompt. 05. Type pushd %SystemRoot% and press Enter. 06. Type rd /s /q Registration and press Enter. 07. Type popd and press Enter. 08. Type exit and press Enter. 09. Use Notepad to remove Hide from the COM= line in %SystemRoot%\Inf\Sysoc.inf. 10. For Windows XP: A. Open a CMD.EXE window B. Type the following commands, pressing ENTER after each line: regsvr32 /s ole32.dll regsvr32 /s oleaut32.dll 11. Start / Settings / Control Panel / Add/Remove Programs / Add/Remove Windows Components. 12. Press Next and reinstall COM+. NOTE: If Windows File Protection blocks any of the above renaming and/or deletions, perform those steps in Safe Mode. 中文技術文檔: 修複損壞的COM+目錄 COM+目錄是一個包含了所有指定系統中COM+應用程式、類和屬性的目錄。Windows作業系統保留這個目錄的目的是確保在不同的COM+的屬性之間保持聯絡,並且將其顯示在不同的程式設計介面中。如果這個目錄損壞,那麼依靠COM+啟動並執行程式將不會正常運行(或者壓根就不能運行!)。 依靠COM+的服務的一個例子就是在微軟公司的NTBACKUP應用程式中所使用的磁碟區陰影複製服務(Volume Shadow Copy Service),當然該服務在其他的程式中也被使用。通過卷影複製,NTBACKUP就能夠對系統檔案或其他鎖定的檔案進行複製。然而,如果在卷影複製的COM+服務中,NTBACKUP由於發生錯誤而失敗,那麼極有可能是目錄受到了損壞,需要進行修複。(COM+目錄損壞的另一個特徵是許多程式連續被掛起數分鐘,但是這隻是一小部分,是沒有被很好說明過的特徵。) 要修複損壞的COM+目錄,需要按照下列的步驟進行操作: 1.尋找到“\%WinDir%\System32\Clbcatq.dll”檔案,並且把它重新命名為“~Clbcatq.dll”(要注意那個符號“~”)。“%Windir%”是個環境變數,這個變數通常可以轉譯成“C:\Windows”。 2.以安全模式重新啟動電腦。 3.開啟註冊表,並刪除下面的索引值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3 4.在“\%WinDir%”目錄中尋找名為“Registration”子目錄。把這個目錄完全刪除,包括其中所包含的一切檔案。 5.以正常方式重新啟動電腦。 6.在命令提示行模式下,鍵入“regsvr32 \%windir%\system32\ole32.dll”,然後在出現的接受提示上點擊“確認”。 7.開啟“控制台”,選擇“添加或刪除程式”,然後再選擇“添加/刪除Windows組件”功能。 8.點擊“下一步”來重新安裝COM+。事實上,你並不需要選擇添加或刪除任何組件;COM+照例會自動進行重新安裝。 在這一步操作之後你不需要重新啟動電腦;重新註冊的COM+服務將會立即生效 IIS問題錯誤還兩種解決方案(這兩種解決方案比較複雜,而且我試過很多次都不成功) : 控制篇 指令碼篇 ------------------------------------------------------------------------ IIS5 HTTP500內部錯誤原因分析及解決—控制篇 ------------------------------------------------------------------------ IIS5的http 500內部伺服器錯誤是經常碰到的錯誤之一,它的主要錯誤表現就是asp程式不能瀏覽但html靜態網頁不受影響 一.錯誤表現 這個錯誤發生時總會有三方面的表現:一是IE中的最直接的表現,也是最讓人看不懂的表現;二是安全日誌中的表現,IWAM_Machine帳號登入失敗;三是系統日誌中的表現,IIS Out-Of-Process Pooled Applications應用程式因啟動帳號的錯誤而不能夠啟動.從而造成ASP頁面瀏覽錯誤.這裡只簡單介紹IE中的表現 當瀏覽以前能夠正常啟動並執行asp頁面時會出現如下的錯誤: 網頁無法顯示 您要訪問的網頁存在問題,因此無法顯示。 --------------------------------------------- 請嘗試下列操作: 開啟 http://127.0.0.1/ 首頁,尋找指向所需資訊的連結。 單擊重新整理按鈕,或者以後重試。 HTTP 500 - 內部伺服器錯誤 Internet 資訊服務 Server Application Error The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance. ---------------------------------------------------------------- (可略過) 在詳細分析HTTP500內部錯誤產生的原因之前,先對IWAM帳號進行一下簡要的介紹:IWAM帳號是安裝IIS5時系統自動建立的一個內建帳號,主要用於啟動進程之外的應用程式的Internet資訊服務。IWAM帳號的名字會根據每台電腦NETBIOS名字的不同而有所不同,通用的格式是IWAM_MACHINE,即由“IWAM”首碼、連接線“_”加上電腦的NETBIOS名字組成。我的電腦的NETBIOS名字是2000,因此我的電腦上IWAM帳號的名字就是IWAM_2000,這一點與IIS匿名帳號ISUR_MACHINE的命名方式非常相似。 IWAM帳號建立後被Active Directory、IIS metabase資料庫和COM+應用程式三方共同使用,帳號密碼被三方分別儲存,並由作業系統負責這三方儲存的IWAM密碼的同步工作。按常理說,由作業系統負責的工作我們大可放心,不必擔心出錯,但不知是BUG還是其它什麼原因,系統的對IWAM帳號的密碼同步化工作有時會失敗,使三方IWAM帳號所用密碼不統一。當IIS或COM+應用程式使用錯誤IWAM的密碼登入系統,啟動IIS Out-Of-Process Pooled Applications時,系統會因密碼錯誤而拒絕這一請求,導致IIS Out-Of-Process Pooled Applications啟動失敗,不能轉入IIS5應用程式,HTTP 500內部錯誤就這樣產生了。 -------------------------------------------------------------------- 出現IIS 500內部錯誤的原因有多個,但最主要的原因是IWAM_MACHINE帳號在Active Directory(或SAM),IIS的metabase資料庫與COM+組件中的密碼不匹配不同步造成的.因此解決問題的關鍵在於使這三方的密碼同步化起來. -------------------------------------------------------------------- 具體操作:操作分三步,均需要以管理員身份登入電腦以提供足夠的操作許可權。 1.在本地帳號管理器中更改IWAM_MACHINE帳號的密碼.(即啟動IIS進程帳號) 2.使用新的密碼重設IIS Metabase資料庫.(即編輯匿名訪問使用的使用者帳號) 3.同步COM+應用程式帳號密碼 (一)更改IWAM_MACHINE帳號的密碼 1、選擇“開始”->“程式”->“管理工具”->"電腦管理"->"本機使用者和組"->"使用者" 選中右面的“IWAM_MACHINE 右鍵選擇"設定密碼" 這裡我們設定成test -------------------------------------------------------------------- (二)使用新的密碼重設IIS Metabase資料庫.(即編輯匿名訪問使用的使用者帳號) 選擇"預設Web 網站屬性"->目錄安全性標籤->編輯"匿名訪問和驗證控制"->在彈出的框中選中匿名訪問,單擊編輯按鈕->使用者名稱瀏覽,選擇IWAM_MACHINE,密碼框中輸入test,選中"允許IIS控制密碼"->確定。如果彈出對話方塊:"非本機使用者帳號不支援密碼同步化。您真要繼續?"確定即可。確定關閉所有對話方塊。 -------------------------------------------------------------------- (三)同步com+應用程式所用的IWAM_MACHINE的密碼 使用元件服務mmc嵌入式管理單元 (1)啟動元件服務嵌入式管理單元:選擇“開始”->“運行”->“mmc”,啟動管理主控台,開啟“添加/刪除嵌入式管理單元”對話方塊,將“元件服務”嵌入式管理單元添加上。 (2)找到“元件服務”->“電腦”->“我的電腦”->“com+應用程式”->“out-of-process pooled applications”,右擊“out-of-process pooled applications”->“屬性”。 (3)切換到“out-of-process pooled applications”屬性對話方塊的“標識”選項卡。選擇“此使用者”,瀏覽,選擇使用者名稱“IWAM_MACHINE”。這些都是預設的。在下面的“密碼”和“確認密碼”文字框內輸入正確的密碼“test”,確定退出。 (4)系統如果提示“應用程式被一個以上的外部產品建立。你確定要被這些產品支援嗎?”時確定即可。 (5)如果我們在iis中將其它一些web的“應用程式保護”設定為“高(獨立的)”,那麼這個web所使用的com+應用程式的iwam帳號密碼也需要同步。 -------------------------------------------------------------------------------------------------------- 好了,到現在為止,IWAM帳號在Active Directory、IIS metabase資料庫和COM+應用程式三處的密碼已經同步成功,你的ASP程式又可以運行了! --------------------------------------------------------- IIS5 HTTP500內部錯誤原因分析及解決—指令碼篇 --------------------------------------------------------- 出現IIS 500內部錯誤的原因有多個,但最主要的原因是IWAM_MACHINE帳號在Active Directory(或SAM),IIS的metabase資料庫與COM+組件中的密碼不匹配不同步造成的.因此解決問題的關鍵在於使這三方的密碼同步化起來. ----------------------------------------------------------------------------------------------------- 具體操作: 操作分三步,均需要以管理員身份登入電腦以提供足夠的操作許可權。 1.在本地帳號管理器中更改IWAM_MACHINE帳號的密碼.(即啟動IIS進程帳號) 2.使用新的密碼重設IIS Metabase資料庫.(即編輯匿名訪問使用的使用者帳號) 3.同步COM+應用程式帳號密碼 (一)更改IWAM_MACHINE帳號的密碼 1、選擇“開始”->“程式”->“管理工具”->"電腦管理"->"本機使用者和組"->"使用者" 選中右面的“IWAM_MACHINE 右鍵選擇"設定密碼" 這裡我們設定成test ----------------------------------------------------------------------------------------------------- (二)使用新的密碼重設IIS Metabase資料庫. 我們需要使用IIS內建的管理指令碼adsutil.運行如下的命令: c:\Inetpub\AdminScripts> adsutil SET w3svc/WAMUserPass test 系統會顯示: WAMUserPass: (String) "******" 提示密碼更新成功. ----------------------------------------------------------------------------------------------------- (三)同步com+應用程式所用的IWAM_MACHINE的密碼 我們要用到IIS的管理指令碼synciwam.vbs,這個指令碼通常會存在於c:\inetpub\adminscripts下,上一個管理指令碼也在這兒放著.(位置可能會因你安裝IIS5時設定的不同而有所變動)。 命令如下: cscript c:\inetpub\adminscripts\synciwam.vbs -v -v參數是開啟詳細模式,讓我們看到更新的過程,通常會如下顯示: Microsoft (R) Windows Script Host Version 5.6 著作權(C) Microsoft Corporation 1996-2000。著作權所有,並保留一切權利。 WamUserName:IWAM_xxxxx WamUserPass:test IIS Applications Defined: Name, AppIsolated, Package ID w3svc, 0, {3D14228C-FBE1-11d0-995D-00C04FD919C1} Root, 2, IISHelp, 2, IISAdmin, 2, IISSamples, 2, MSADC, 2, ROOT, 2, IISAdmin, 2, IISHelp, 2, Root, 2, Root, 2, Out of process applications defined: Count: 1 {3D14228D-FBE1-11d0-995D-00C04FD919C1} Updating Applications: Name: IIS Out-Of-Process Pooled Applications Key: {3D14228D-FBE1-11D0- 995D-00C04FD919C1} 密碼同步化成功.如果不成功先看一下這個指令碼取的IIS的密碼正確不正確,如果不正確請重複第二步同步IIS密碼. 好了,到現在為止,IWAM帳號在Active Directory、IIS metabase資料庫和COM+應用程式三處的密碼已經同步成功,你的ASP程式又可以運行了! 快速應急解決辦法:-應急速效丸 使用元件服務mmc嵌入式管理單元 1.啟動元件服務嵌入式管理單元:選擇“開始”->“運行”->“mmc”,啟動管理主控台,開啟“控制台”->“添加/刪除嵌入式管理單元”對話方塊,將“元件服務”嵌入式管理單元添加上。 2.找到“元件服務”->“電腦”->“我的電腦”->“com+應用程式”->“out-of-process pooled applications”,右擊“out-of-process pooled applications”->“屬性”。 3.切換到“標識”選項卡。選擇“互動式使用者-目前已登陸的使用者”,確定退出。 4.系統如果提示“應用程式被一個以上的外部產品建立。你確定要被這些產品支援嗎?”確定即可。 現在你試試,ASP應該可以運行了 COM+應用程式打不開.我的電腦那還有個紅色的標誌,以前是沒有的.... 在事件檢視器裡看到 "應用程式-特定 使用權限設定未將 COM 伺服器應用程式(CLSID 為 {A7CC2FDB-EED7-4FDA-880E-C762570CC005} )的 本地 啟用 許可權授予使用者 MICROSOF-C0F0E9\ghdo SID (S-1-5-21-1004336348-796845957-725345543-1004)。可以使用元件服務管理工具修改此安全許可權。" "錯誤碼8004E00F-COM+無法與Microsoft分散式交易協調程式" 解決方案: 運行 msdtc -resetlog 運行 mmc是開啟iis控制台 ======================================================================== ======================================================================== 指令碼法解決時出現問題8004E00F 1、重新設定IIS的IWAM帳號密碼。[在電腦管理中的使用者管理裡] 2、同步IIS metabase中IWAM_MYSERVER的密碼,在CMD中:c:\inetput\adminscripts>adsutil set w3svc/wamuserpass "yourpassword" 3、同步COM+應用程式所用的IWAM_MYSERVER密碼,在CMD中:c:\inetput\adminscripts>cscript synciwam.vbs -v,但是在進行第三步操作時總是報8004e00f錯誤。 後來在系統裡不斷的亂看,發現MSDTC服務不正常,於是先從這裡下手,具體的解決方案如下: 1、首先進入元件服務,查看元件服務/電腦/我的電腦/COM+應用程式,結果報錯“COM+ 無法與 Microsoft 分散式交易協調程式交談”,無法查看裡面的對象。 2、進入事件檢視器,發現msdtc服務沒有正常啟動。 3、刪除註冊表中的鍵: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC HKEY_CLASSES_ROOT\CID 4、停止MSDTC服務:net stop msdtc 5、卸載MSDTC服務:msdtc -uninstall 6、重新安裝MSDTC服務:msdtc -install 7、確認在事件檢視器中msdtc服務已經正常啟動[這步很關鍵,如果沒有,重新啟動下電腦看看,然後再同步密碼(就是開始的那三步) 其實,網上的這些方法確實都沒有錯,但有個前提,就是IIS所必需的組件都安裝了!其實“COM+ 無法與 Microsoft 分散式交易協調程式交談()”在安裝了Windows組件中的訊息佇列後,就不會出現這個錯誤了,同時“訊息佇列”組件又對服務中的“Distributed Transaction Coordinator”(即msdtc服務)有依存關係,這個服務必須啟用,才可以安裝訊息佇列組件!訊息佇列裝好後,中的COM+應用程式菜單就可以開啟了,表示其已正常工作!如果在這個時候再裝IIS或者把IIS卸載重裝,就不需要上面的手動密碼同步化問題了!就是說按這個步驟安裝好IIS,就已經正常了!實際上,手工同步密碼太過麻煩,成功率也不高!本人試了很多次都沒有成功,大家可以自己試試! 2. 微軟的關於MS DTC 無法安裝的解決辦法的文章: 如何在運行 Windows XP 的電腦上重新安裝 Microsoft 分散式交易協調器 http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B891801 ========================== 將步驟摘抄到這裡: 本文介紹如何在運行 Microsoft Windows XP 的電腦上重新安裝 Microsoft 分散式交易協調器 (MS DTC)。 更多資訊 一般而言,在運行 Windows XP 或更高版本的電腦上不必重新安裝 Microsoft 分散式交易協調器 (Msdtc.exe)。如果使用較早的作業系統,在安裝諸如 Microsoft SQL Server 6.5 的軟體後,可能必須重新安裝 MS DTC,因為此軟體會使用其包含的版本覆蓋 MS DTC 二進位檔案。重新安裝正確版本的 Msdtc.exe 可以還原二進位檔案。在 Windows XP 和更高版本中,Windows 檔案保護 (WFP) 功能可確保當前系統二進位檔案不被替換。 但是,如果必須在運行 Windows XP 的電腦上重新安裝 MS DTC,請使用下列過程。 警告:如果使用下列步驟,則所有未完成的事務都將丟失。確保在執行下列步驟之前,沒有活動的事務。 警告:登錄編輯程式使用不當可導致嚴重問題,可能需要重新安裝作業系統。Microsoft 不能保證您可以解決因登錄編輯程式使用不當而導致的問題。使用登錄編輯程式需要您自擔風險。 1. 在“管理工具”中,開啟“服務”,然後停止所有服務。 2. 在“啟動類型”列中,除下表中的服務以外,將所有其他服務的啟動類型更改為“手動”。 注意:建議您記下所更改的服務,以便可以在步驟 7 中正確還原這些值。 COM+ Event System Computer Browser Distributed Link Tracking Client DNS Client Event Log IPSEC Services Logical Disk Manager Messenger Net Logon NT LM Security Support Provider Network Connections Plug and Play Remote Procedure Call (RPC) Remote Procedure Call (RPC) Locator Removable Storage Security Accounts Manager Server System Event Notification Task Scheduler TCP/IP NetBIOS Helper Windows Management Instrumentation Windows Management Instrumentation Driver Extensions Windows Time Workstation 3. 關閉“服務”,然後重新啟動電腦。 4. 在命令提示字元下,鍵入以下命令: %WINDIR%\System32\msdtc.exe -uninstall 5. 啟動登錄編輯程式,如果存在下列登錄機碼則將其刪除: HKEY_CLASSES_ROOT\CID HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MSDTC HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MSDTC HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC 6. 在命令提示字元下,鍵入 %WINDIR%\System32\msdtc.exe -install。 7. 等待磁碟活動停止,然後將所更改的服務的啟動類型還原為其原始值。 8. 在註冊表中,建立以下登錄機碼: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL 9. 在命令提示字元下,鍵入 regsvr32 mtxoci.dll。 您將收到一條表明 Mtxoci.dll 中的 DllRegisterServer 已成功的訊息。單擊“確定”關閉該訊息。 10. 重新啟動電腦。 11. 在命令提示字元下,鍵入 %WINDIR%\System32\msdtc.exe -resetlog。 ======================================================================================= 到這裡MS DTC 已經安裝成功 重新運行msdtc -resetlog |