“IIS 500 錯誤,可以開啟html卻無法開啟asp”的解決方案
阿新 • • 發佈:2019-02-04
一.錯誤表現
iis5的http500內部伺服器錯誤是我們經常碰到的錯誤之一,它的主要錯誤表現就是asp程式不能瀏覽但htm靜態網頁不受影響。另外當錯誤發生時,系統事件日誌和安全事件日誌都會有相應的記錄。
具體如下:
(一)ie中的表現
當瀏覽以前能夠正常執行的asp頁面時會出現如下的錯誤:
網頁無法顯示
您要訪問的網頁存在問題,因此無法顯示。
請嘗試下列操作:
開啟http://127.0.0.1主頁,尋找指向所需資訊的連結。
單擊重新整理按鈕,或者以後重試。
http500-內部伺服器錯誤
internet資訊服務
技術資訊(支援個人)
詳細資訊:
microsoft支援
或者是:
serverapplicationerror
theserverhasencounteredanerrorwhileloadinganapplicationduringtheprocessingofyourrequest.pleaserefertotheeventlogformoredetailinformation.pleasecontacttheserveradministratorforassistance.
(二)安全日誌記錄(2條)
事件型別:失敗稽核
事件來源:security
事件種類:登入/登出
事件id:529
日期:2001-9-9
事件:11:17:07
使用者:ntauthority/system
計算機:myserver
描述:
登入失敗:
原因:使用者名稱未知或密碼錯誤
使用者名稱:iwam_myserver
域:mydom
登入型別:4
登入過程:advapi
身份驗證程式包:microsoft_authentication_package_v1_0
工作站名:myserver
事件型別:失敗稽核
事件來源:security
事件種類:帳戶登入
事件id:681
日期:2001-9-9
事件:11:17:07
使用者:ntauthority/system
計算機:myserver
描述:
登入到帳戶:iwam_myserver
登入的使用者:microsoft_authentication_package_v1_0
從工作站:myserver
未成功。錯誤程式碼是:3221225578
(三)系統日誌中的記錄(2條)
事件型別:錯誤
事件來源:dcom
事件種類:無
事件id:10004
日期:2001-9-9
事件:11:20:26
使用者:n/a
計算機:myserver
描述:
dcom遇到錯誤“無法更新密碼。提供給新密碼的值包含密碼中不允許的值。”並且無法登入到./iwam_myserver上以執行伺服器:
3d14228d-fbe1-11d0-995d-00c04fd919c1}
事件型別:警告
事件來源:w3svc
事件種類:無
事件id:36
日期:2001-9-9
事件:11:20:26
使用者:n/a
計算機:myserver
描述:
伺服器未能轉入應用程式‘/lm/w3svc/4/root‘。錯誤是‘runas的格式必須是<域名>/<使用者名稱>或只是<使用者名稱>‘。
若要獲取關於此訊息的更多的資訊,請訪問microsoft聯機支援站點: http://www.microsoft.com/contentredirect.asp。
二.原因分析
綜合分析上面的錯誤表現我們可以看出,主要是由於iwam賬號(在我的計算機即是iwam_myserver賬號)的密碼錯誤造成了http500內部錯誤。
在詳細分析http500內部錯誤產生的原因之前,先對iwam賬號進行一下簡要的介紹:iwam賬號是安裝iis5時系統自動建立的一個內建賬號,主要用於啟動程序之外的應用程式的internet資訊服務。iwam賬號的名字會根據每臺計算機netbios名字的不同而有所不同,通用的格式是iwam_machine,即由“iwam”字首、連線線“_”加上計算機的netbios名字組成。我的計算機的netbios名字是myserver,因此我的計算機上iwam賬號的名字就是iwam_myserver,這一點與iis匿名賬號isur_machine的命名方式非常相似。
iwam賬號建立後被activedirectory、iismetabase資料庫和com+應用程式三方共同使用,賬號密碼被三方分別儲存,並由作業系統負責這三方儲存的iwam密碼的同步工作。按常理說,由作業系統負責的工作我們大可放心,不必擔心出錯,但不知是bug還是其它什麼原因,系統的對iwam賬號的密碼同步工作有時會失敗,使三方iwam賬號所用密碼不統一。當iis或com+應用程式使用錯誤iwam的密碼登入系統,啟動iisout-of-processpooledapplications時,系統會因密碼錯誤而拒絕這一請求,導致iisout-of-processpooledapplications啟動失敗,也就是我們在id10004錯誤事件中看到的“不能執行伺服器3d14228d-fbe1-11d0-995d-00c04fd919c1}”(這裡3d14228d-fbe1-11d0-995d-00c04fd919c1}是iisout-of-processpooledapplications的key),不能轉入iis5應用程式,http500內部錯誤就這樣產生了。
三.解決辦法
知道了導致http500內部錯誤的原因,解決起來就比較簡單了,那就是人工同步iwam賬號在activedirectory、iismetabase資料庫和com+應用程式中的密碼。
具體操作分三步,均需要以管理員身份登入計算機以提供足夠的操作許可權(iwam賬號以iwam_myserver為例)。
(一)更改activedirectory中iwam_myserver賬號的密碼
因iwam賬號的密碼由系統控制,隨機產生,我們並不知道是什麼,為完成下面兩步的密碼同步工作,我們必須將iwam賬號的密碼設定為一個我們知道的值。
1、選擇“開始”->“程式”->“管理工具”->"activedirectory使用者和計算機",啟動“activedirectory使用者和計算機”管理單元。
2、單擊“user”,選中右面的“iwam_myserver”,右擊選擇“重設密碼(t)...”,在跳出的重設密碼對方框中給iwam_myserver設定新的密碼,這兒我們設定成“aboutnt2001”(沒有引號的),確定,等待密碼修改成功。
(二)同步iismetabase中iwam_myserver賬號的密碼
可能因為這項改動太敏感和重要,微軟並沒有為我們修改iismetabase中iwam_myserver賬號密碼提供一個顯式的使用者介面,只隨iis5提供了一個管理指令碼adsutil.vbs,這個指令碼位於c:/inetpub/adminscripts子目錄下(位置可能會因你安裝iis5時設定的不同而有所變動)。
adsutil.vbs指令碼功能強大,引數非常多且用法複雜,這裡只提供使用這個指令碼修改iwam_myserver賬號密碼的方法:
adsutil set w3svc/wamuser passpassword
"password"引數就是要設定的iwam賬號的新的密碼。因此我們將iismetabase中iwam_myserver賬號的密碼修改為“aboutnt2001”的命令就是:
c:/inetpub/adminscripts>adsutil set w3svc/wamuserpass "aboutnt2001"
修改成功後,系統會有如下提示:
wamuserpass:(string)"aboutnt2001"
(三)同步com+應用程式所用的iwam_myserver的密碼
同步com+應用程式所用的iwam_myserver的密碼,我們有兩種方式可以選擇:一種是使用元件服務mmc管理單元,另一種是使用iwam賬號同步指令碼synciwam.vbs。
1、使用元件服務mmc管理單元
(1)啟動元件服務管理單元:選擇“開始”->“執行”->“mmc”,啟動管理控制檯,開啟“新增/刪除管理單元”對話方塊,將“元件服務”管理單元新增上。
(2)找到“元件服務”->“計算機”->“我的電腦”->“com+應用程式”->“out-of-processpooledapplications”,右擊“out-of-processpooledapplications”->“屬性”。
(3)切換到“out-of-processpooledapplications”屬性對話方塊的“標誌”選項卡。“此應用程式在下列賬戶下執行”選擇中“此使用者”會被選中,使用者名稱是“iwam_myserver”。這些都是預設的,不必改動。在下面的“密碼”和“確認密碼”文字框內輸入正確的密碼“aboutnt2001”,確定退出。
(4)系統如果提示“應用程式被一個以上的外部產品建立。你確定要被這些產品支援嗎?”時確定即可。
(5)如果我們在iis中將其它一些web的“應用程式保護”設定為“高(獨立的)”,那麼這個web所使用的com+應用程式的iwam賬號密碼也需要同步。重複(1)-(4)步,同步其它相應outofprocessapplication的iwam賬號密碼。
2、使用iwam賬號同步指令碼synciwam.vbs
實際上微軟已經發現iwam賬號在密碼同步方面存在問題,因此在iis5的管理指令碼中單獨為iwam賬號密碼同步編寫了一個指令碼synciwam.vbs,這個指令碼位於c:/inetpub/adminscripts子目錄下(位置可能會因你安裝iis5時設定的不同而有所變動)。
synciwam.vbs指令碼用法比較簡單:
cscriptsynciwam.vbs[-v|-h]
“-v”引數表示詳細顯示指令碼執行的整個過程(建議使用),“-h”引數用於顯示簡單的幫助資訊。
我們要同步iwam_myserver賬號在com+應用程式中的密碼,只需要執行“cscriptsynciwam.vbs-v”即可,如下:
cscriptc:/inetpub/adminscripts/synciwam.vbs -v
microsoft(r)windowsscripthostversion5.6
版權所有(c)microsoftcorporation1996-2000。保留所有權利。
wamusername:iwam_myserver
wamuserpass:aboutnt2001
iisapplicationsdefined:
name,appisolated,packageid
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,
outofprocessapplicationsdefined:
count:1
3d14228d-fbe1-11d0-995d-00c04fd919c1}
updatingapplications:
name:iisout-of-processpooledapplicationskey:3d14228d-fbe1-11d0-995d-00c04fd919c1}
從上面指令碼的執行情況可以看出,使用synciwam.vbs指令碼要比使用元件服務的方法更全面和快捷。它首先從iis的metabase資料庫找到iwam賬號"iwam_myserver"並取出對應的密碼“aboutnt2001”,然後查詢所有已定義的iisapplications和outofprocessapplications,並逐一同步每一個outofprocessapplications應用程式的iwam賬號密碼。
使用synciwam.vbs指令碼時,要注意一個問題,那就是在你執行synciwam.vbs之前,必須保證iismetabase資料庫與activedirectory中的iwam密碼已經一致。因為synciwam.vbs指令碼是從iismetabase資料庫而不是從activedirectory取得iwam賬號的密碼,如果iismetabase中的密碼不正確,那synciwam.vbs取得的密碼也會不正確,同步操作執行到“updatingapplications”系統就會報80110414錯誤,即“找不到應用程式3d14228d-fbe1-11d0-995d-00c04fd919c1}”。
好了,到現在為止,iwam賬號在activedirectory、iismetabase資料庫和com+應用程式三處的密碼已經同步成功,你的asp程式又可以運行了!
修改成功後,系統會有如下提示:
---------------------------------------------------
經過測試,顯示應該是
wamuserpass:(string)"*******"
iis5的http500內部伺服器錯誤是我們經常碰到的錯誤之一,它的主要錯誤表現就是asp程式不能瀏覽但htm靜態網頁不受影響。另外當錯誤發生時,系統事件日誌和安全事件日誌都會有相應的記錄。
具體如下:
(一)ie中的表現
當瀏覽以前能夠正常執行的asp頁面時會出現如下的錯誤:
網頁無法顯示
您要訪問的網頁存在問題,因此無法顯示。
請嘗試下列操作:
開啟http://127.0.0.1主頁,尋找指向所需資訊的連結。
單擊重新整理按鈕,或者以後重試。
http500-內部伺服器錯誤
internet資訊服務
技術資訊(支援個人)
詳細資訊:
microsoft支援
或者是:
serverapplicationerror
theserverhasencounteredanerrorwhileloadinganapplicationduringtheprocessingofyourrequest.pleaserefertotheeventlogformoredetailinformation.pleasecontacttheserveradministratorforassistance.
(二)安全日誌記錄(2條)
事件型別:失敗稽核
事件來源:security
事件種類:登入/登出
事件id:529
日期:2001-9-9
事件:11:17:07
使用者:ntauthority/system
計算機:myserver
描述:
登入失敗:
原因:使用者名稱未知或密碼錯誤
使用者名稱:iwam_myserver
域:mydom
登入型別:4
登入過程:advapi
身份驗證程式包:microsoft_authentication_package_v1_0
工作站名:myserver
事件型別:失敗稽核
事件來源:security
事件種類:帳戶登入
事件id:681
日期:2001-9-9
事件:11:17:07
使用者:ntauthority/system
計算機:myserver
描述:
登入到帳戶:iwam_myserver
登入的使用者:microsoft_authentication_package_v1_0
從工作站:myserver
未成功。錯誤程式碼是:3221225578
(三)系統日誌中的記錄(2條)
事件型別:錯誤
事件來源:dcom
事件種類:無
事件id:10004
日期:2001-9-9
事件:11:20:26
使用者:n/a
計算機:myserver
描述:
dcom遇到錯誤“無法更新密碼。提供給新密碼的值包含密碼中不允許的值。”並且無法登入到./iwam_myserver上以執行伺服器:
3d14228d-fbe1-11d0-995d-00c04fd919c1}
事件型別:警告
事件來源:w3svc
事件種類:無
事件id:36
日期:2001-9-9
事件:11:20:26
使用者:n/a
計算機:myserver
描述:
伺服器未能轉入應用程式‘/lm/w3svc/4/root‘。錯誤是‘runas的格式必須是<域名>/<使用者名稱>或只是<使用者名稱>‘。
若要獲取關於此訊息的更多的資訊,請訪問microsoft聯機支援站點:
二.原因分析
綜合分析上面的錯誤表現我們可以看出,主要是由於iwam賬號(在我的計算機即是iwam_myserver賬號)的密碼錯誤造成了http500內部錯誤。
在詳細分析http500內部錯誤產生的原因之前,先對iwam賬號進行一下簡要的介紹:iwam賬號是安裝iis5時系統自動建立的一個內建賬號,主要用於啟動程序之外的應用程式的internet資訊服務。iwam賬號的名字會根據每臺計算機netbios名字的不同而有所不同,通用的格式是iwam_machine,即由“iwam”字首、連線線“_”加上計算機的netbios名字組成。我的計算機的netbios名字是myserver,因此我的計算機上iwam賬號的名字就是iwam_myserver,這一點與iis匿名賬號isur_machine的命名方式非常相似。
iwam賬號建立後被activedirectory、iismetabase資料庫和com+應用程式三方共同使用,賬號密碼被三方分別儲存,並由作業系統負責這三方儲存的iwam密碼的同步工作。按常理說,由作業系統負責的工作我們大可放心,不必擔心出錯,但不知是bug還是其它什麼原因,系統的對iwam賬號的密碼同步工作有時會失敗,使三方iwam賬號所用密碼不統一。當iis或com+應用程式使用錯誤iwam的密碼登入系統,啟動iisout-of-processpooledapplications時,系統會因密碼錯誤而拒絕這一請求,導致iisout-of-processpooledapplications啟動失敗,也就是我們在id10004錯誤事件中看到的“不能執行伺服器3d14228d-fbe1-11d0-995d-00c04fd919c1}”(這裡3d14228d-fbe1-11d0-995d-00c04fd919c1}是iisout-of-processpooledapplications的key),不能轉入iis5應用程式,http500內部錯誤就這樣產生了。
三.解決辦法
知道了導致http500內部錯誤的原因,解決起來就比較簡單了,那就是人工同步iwam賬號在activedirectory、iismetabase資料庫和com+應用程式中的密碼。
具體操作分三步,均需要以管理員身份登入計算機以提供足夠的操作許可權(iwam賬號以iwam_myserver為例)。
(一)更改activedirectory中iwam_myserver賬號的密碼
因iwam賬號的密碼由系統控制,隨機產生,我們並不知道是什麼,為完成下面兩步的密碼同步工作,我們必須將iwam賬號的密碼設定為一個我們知道的值。
1、選擇“開始”->“程式”->“管理工具”->"activedirectory使用者和計算機",啟動“activedirectory使用者和計算機”管理單元。
2、單擊“user”,選中右面的“iwam_myserver”,右擊選擇“重設密碼(t)...”,在跳出的重設密碼對方框中給iwam_myserver設定新的密碼,這兒我們設定成“aboutnt2001”(沒有引號的),確定,等待密碼修改成功。
(二)同步iismetabase中iwam_myserver賬號的密碼
可能因為這項改動太敏感和重要,微軟並沒有為我們修改iismetabase中iwam_myserver賬號密碼提供一個顯式的使用者介面,只隨iis5提供了一個管理指令碼adsutil.vbs,這個指令碼位於c:/inetpub/adminscripts子目錄下(位置可能會因你安裝iis5時設定的不同而有所變動)。
adsutil.vbs指令碼功能強大,引數非常多且用法複雜,這裡只提供使用這個指令碼修改iwam_myserver賬號密碼的方法:
adsutil set w3svc/wamuser passpassword
"password"引數就是要設定的iwam賬號的新的密碼。因此我們將iismetabase中iwam_myserver賬號的密碼修改為“aboutnt2001”的命令就是:
c:/inetpub/adminscripts>adsutil set w3svc/wamuserpass "aboutnt2001"
修改成功後,系統會有如下提示:
wamuserpass:(string)"aboutnt2001"
(三)同步com+應用程式所用的iwam_myserver的密碼
同步com+應用程式所用的iwam_myserver的密碼,我們有兩種方式可以選擇:一種是使用元件服務mmc管理單元,另一種是使用iwam賬號同步指令碼synciwam.vbs。
1、使用元件服務mmc管理單元
(1)啟動元件服務管理單元:選擇“開始”->“執行”->“mmc”,啟動管理控制檯,開啟“新增/刪除管理單元”對話方塊,將“元件服務”管理單元新增上。
(2)找到“元件服務”->“計算機”->“我的電腦”->“com+應用程式”->“out-of-processpooledapplications”,右擊“out-of-processpooledapplications”->“屬性”。
(3)切換到“out-of-processpooledapplications”屬性對話方塊的“標誌”選項卡。“此應用程式在下列賬戶下執行”選擇中“此使用者”會被選中,使用者名稱是“iwam_myserver”。這些都是預設的,不必改動。在下面的“密碼”和“確認密碼”文字框內輸入正確的密碼“aboutnt2001”,確定退出。
(4)系統如果提示“應用程式被一個以上的外部產品建立。你確定要被這些產品支援嗎?”時確定即可。
(5)如果我們在iis中將其它一些web的“應用程式保護”設定為“高(獨立的)”,那麼這個web所使用的com+應用程式的iwam賬號密碼也需要同步。重複(1)-(4)步,同步其它相應outofprocessapplication的iwam賬號密碼。
2、使用iwam賬號同步指令碼synciwam.vbs
實際上微軟已經發現iwam賬號在密碼同步方面存在問題,因此在iis5的管理指令碼中單獨為iwam賬號密碼同步編寫了一個指令碼synciwam.vbs,這個指令碼位於c:/inetpub/adminscripts子目錄下(位置可能會因你安裝iis5時設定的不同而有所變動)。
synciwam.vbs指令碼用法比較簡單:
cscriptsynciwam.vbs[-v|-h]
“-v”引數表示詳細顯示指令碼執行的整個過程(建議使用),“-h”引數用於顯示簡單的幫助資訊。
我們要同步iwam_myserver賬號在com+應用程式中的密碼,只需要執行“cscriptsynciwam.vbs-v”即可,如下:
cscriptc:/inetpub/adminscripts/synciwam.vbs -v
microsoft(r)windowsscripthostversion5.6
版權所有(c)microsoftcorporation1996-2000。保留所有權利。
wamusername:iwam_myserver
wamuserpass:aboutnt2001
iisapplicationsdefined:
name,appisolated,packageid
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,
outofprocessapplicationsdefined:
count:1
3d14228d-fbe1-11d0-995d-00c04fd919c1}
updatingapplications:
name:iisout-of-processpooledapplicationskey:3d14228d-fbe1-11d0-995d-00c04fd919c1}
從上面指令碼的執行情況可以看出,使用synciwam.vbs指令碼要比使用元件服務的方法更全面和快捷。它首先從iis的metabase資料庫找到iwam賬號"iwam_myserver"並取出對應的密碼“aboutnt2001”,然後查詢所有已定義的iisapplications和outofprocessapplications,並逐一同步每一個outofprocessapplications應用程式的iwam賬號密碼。
使用synciwam.vbs指令碼時,要注意一個問題,那就是在你執行synciwam.vbs之前,必須保證iismetabase資料庫與activedirectory中的iwam密碼已經一致。因為synciwam.vbs指令碼是從iismetabase資料庫而不是從activedirectory取得iwam賬號的密碼,如果iismetabase中的密碼不正確,那synciwam.vbs取得的密碼也會不正確,同步操作執行到“updatingapplications”系統就會報80110414錯誤,即“找不到應用程式3d14228d-fbe1-11d0-995d-00c04fd919c1}”。
好了,到現在為止,iwam賬號在activedirectory、iismetabase資料庫和com+應用程式三處的密碼已經同步成功,你的asp程式又可以運行了!
修改成功後,系統會有如下提示:
---------------------------------------------------
經過測試,顯示應該是
wamuserpass:(string)"*******"