IIS打不開ASP文件的完全解決方案

      暑假回來後IIS(XP下)突然出了問題(未作過任何設置,只是升級過):無法解釋ASP/PHP,對於一個網站設計人員來說,這就象吃飯沒有筷子一樣不爽。後來試過多種解決方案均無效,算了,等不及,還是用APACHE了,但用起來總是感覺怪怪的;後來又在虛擬機中裝了2K Server 來運行IIS,但這樣總是太麻煩,遂決定徹底解決XP下IIS無法解釋動態頁的問題,又在網上搜索之,終於於今日解決,下面將流程寫於下,以供來人方便:
出錯原因:
    XP下IIS無法解釋ASP等動態頁主要是由微軟的一個BUG造成的。由於系統原因使IWAM帳號的密碼錯誤,致使出現IIS500內部錯誤。
IWAM 帳號簡介:
    IWAM 賬號是安裝 IIS5 時系統自動建立的一個內置賬號,主要用於啓動進程之外的應用程序的Internet信息服務。IWAM賬號的名字會根據每臺計算機 NETBIOS 名字的不同而有所不同,通用的格式是IWAM_MACHINENAME,即由“IWAM”前綴、連接線“_”加上計算機的NETBIOS名字組成。我的計算機的NETBIOS名字是JALLEN,因此我的計算機上IWAM賬號的名字就是IWAM_JALLEN,這一點與IIS匿名賬號ISUR_MACHINENAME的命名方式非常相似。
IIS 500錯誤最終原因:
    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啓動失敗,也就是我們在ID10004錯誤事件中看到的“不能運行服務器{3D14228D-FBE1-11D0-995D-00C04FD919C1} ”(這裏{3D14228D-FBE1-11D0-995D-00C04FD919C1} 是IIS Out-Of-Process Pooled Applications的KEY),不能轉入IIS5應用程序,HTTP 500內部錯誤就這樣產生了。
解決方法:
    知道了導致HTTP 500內部錯誤的原因,解決起來就比較簡單了,那就是人工同步IWAM賬號在Active Directory、IIS metabase數據庫和COM+應用程序中的密碼。


操作過程/步驟:
    具體操作分三步,均需要以管理員身份登錄計算機以提供足夠的操作權限(IWAM賬號以IWAM_MACHINENAME爲例)。

   (一)更改Active Directory中IWAM_MACHINENAME賬號的密碼
因IWAM賬號的密碼由系統控制,隨機產生,我們並不知道是什麼,爲完成下面兩步的密碼同步工作,我們必須將IWAM賬號的密碼設置爲一個我們知道的值。

1、控制面版中選擇“管理工具”->"計算機管理"->"本地用戶和組" ->"用戶"

2、找到“IWAM_MACHINENAME”,右擊選擇“重設密碼(T)...”,在跳出的重設密碼對方框中給IWAM_MACHINENAME設置新的密碼,這兒我們設置成“IIS500”(沒有引號的),確定,等待密碼修改成功。


   (二)同步IIS metabase中IWAM_MACHINENAME賬號的密碼
可能因爲這項改動太敏感和重要,微軟並沒有爲我們修改IIS metabase中IWAM_MACHINENAME賬號密碼提供一個顯式的用戶接口,只隨IIS5提供了一個管理腳本adsutil.vbs,這個腳本位於C:\inetpub\adminscripts子目錄下(位置可能會因你安裝IIS5時設置的不同而有所變動)。

adsutil.vbs腳本功能強大,參數非常多且用法複雜,這裏只提供使用這個腳本修改IWAM_MACHINENAME賬號密碼的方法:

adsutil SET w3svc/WAMUserPass Password

"Password"參數就是要設置的IWAM賬號的新的密碼。因此我們將IIS metabase中IWAM_MACHINENAME賬號的密碼修改爲“IIS500”的命令就是:

c:\Inetpub\AdminScripts>adsutil SET w3svc/WAMUserPass "IIS500"

具體操作:"運行"->"CMD"->轉到"C:\Inetpub\AdminScripts>"目錄->輸入 adsutil SET w3svc/WAMUserPass "IIS500" 確定即可;

修改成功後,系統會有如下提示:

WAMUserPass: (String) "******"


   (三)同步COM+應用程序所用的IWAM_MACHINENAME的密碼
實際上可能微軟已經發現IWAM賬號在密碼同步方面存在問題,因此在IIS5的管理腳本中單獨爲IWAM賬號密碼同步編寫了一個腳本synciwam.vbs,我們就使用這個IWAM賬號的同步腳本synciwam.vbs來操作,這個腳本同adsutil.vbs一樣,也位於C:\inetpub\adminscripts子目錄下(位置可能會因你安裝IIS5時設置的不同而有所變動)。

synciwam.vbs腳本用法比較簡單:

cscript synciwam.vbs [-v|-h]

“-v”參數表示詳細顯示腳本執行的整個過程(建議使用),“-h”參數用於顯示簡單的幫助信息。

我們要同步IWAM_MACHINENAME賬號在COM+應用程序中的密碼,只需要執行“cscript synciwam.vbs -v”即可,如下:

cscript c:\inetpub\adminscripts\synciwam.vbs -v
具體操作:在以上界面接着輸入 cscript synciwam.vbs -v 確定即可;
以下是成功後的系統顯示信息:

Microsoft (R) Windows Script Host Version 5.6

版權所有(C) Microsoft Corporation 1996-2000。保留所有權利。

WamUserName:IWAM_MACHINENAME

WamUserPass:IIS500

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的metabase數據庫找到IWAM賬號"IWAM_MACHINENAME"並取出對應的密碼“IIS500”,然後查找所有已定義的IIS Applications和Out of process applications,並逐一同步每一個Out of process applications應用程序的IWAM賬號密碼。

使用synciwam.vbs腳本時,要注意一個問題,那就是在你運行synciwam.vbs之前,必須保證IIS metabase數據庫與Active Directory中的IWAM密碼已經一致。因爲synciwam.vbs腳本是從IIS metabase數據庫而不是從Active Directory取得IWAM賬號的密碼,如果IIS metabase中的密碼不正確,那synciwam.vbs取得的密碼也會不正確,同步操作執行到“Updating Applications”系統就會報80110414錯誤,即“找不到應用程序{3D14228D-FBE1-11D0-995D-00C04FD919C1}”。

PS:在同步COM+應用程序所用的IWAM_MACHINENAME的密碼時又發生"Error: 8004E00F:"錯誤,於是在"控制面版"->"管理工具"->"組件服務"->"計算機"->"我的電腦"查看COM+應用程序,恩!居然這裏出錯,說無法與MICROSOFT 分佈式事件處理協調程序交談……;於是再查,得到如下解決方案。
解決步驟:
1、刪除註冊表中的鍵:
&S226; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
&S226; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
&S226; HKEY_CLASSES_ROOT\CID
2、停止MSDTC服務:net stop msdtc
3、卸載MSDTC服務:msdtc -uninstall
4、重新安裝MSDTC服務:msdtc -install
5、重新啓動電腦

好了,現在總算成功了,我的IIS上又跑起了ASP&PHP…… 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章