今天遇到個問題,一個ASP網站生成靜態頁面時報錯:
Microsoft VBScript 運行時錯誤 錯誤 '800a01ad'
ActiveX 部件不能創建對象: 'Scripting.FileSystemObject'
其實這個問題比較常見,報錯原因是服務器不支持FSO組件。像風訊、科汛、動易這些ASP的主流CMS系統中經常會遇到這種情況,因為他們都是采取靜態生成機制的,需要FSO組件支持。在開始之前,你有必要先用ASP探針測試下服務器對FSO組件的支持情況,通常我們使用的是Windows 2003系統的服務器。
下面說下我的具體解決思路,對每一種可能會產生報錯的原因都作了相應分析,希望對你能有所幫助。
1)“scrrun.dll”文件未注冊。行C:\WINDOWS\system32文件夾下,看下有沒有scrrun.dll文件。如果沒有,就去系統安裝目錄i386文件夾中拷貝一個過來。接下來,開始菜單->運行以下命令注冊一下FSO組件即可:
regsvr32.exe %windir%/system32/scrrun.dll這樣就開啟了服務器對FSO組件的支持,如果你想關閉FSO組件,則運行以下命令:
regsvr32.exe /u %windir%/system32/scrrun.dll正常到這裡,你的問題就可以解決了。
2)如果還不行,檢查一下浏覽器是否禁用了ActiveX控件。正常是不會的,除非是服務器,安全級別才會嚴格限制。如果存在這種情況,那就把浏覽器的安全級別調整為中低即可。
3)你的服務器本身就不支持FSO組件。
4)考慮權限問題。依次執行如下操作:
開始菜單->運行->regedit->確定,依次找到HKEY_CLASSES_ROOT\Scripting.FileSystemObject,右鍵“權限”,加上Everyone、Internet來賓帳號(IUSR...)用戶的權限,重啟IIS即可解決。
5)附:服務器不支持Scripting.Dictionary組件的解決辦法
通過以上幾步就能完美解決ActiveX創建對象失敗的問題了。如果還出現不支持Scripting.Dictionary組件的問題,解決辦法也是類似的,參考第一步執行regsvr32.exe %windir%/system32/scrrun.dll命令即可。如果還沒解決,則考慮權限問題,可以參照第四步到注冊表中給這個對象添加下權限即可。舉一反三,如果再遇到類似問題的話,知道怎麼去解決了吧!
6)附:Server.CreateObject 失敗解決辦法。我們執行程序的時候可能會提示類似錯誤,如下:
服務器對象 錯誤 'ASP 0177 : 800401f3'
Server.CreateObject 失敗
/include/test.asp,行38打開test.asp,檢查源碼38行附近,看下創建對象的寫法有沒有錯誤,標准寫法應該是:
<% Set fso = Server.CreateObject("Scripting.FileSystemObject") %>
這種情況大多是程序員粗心導致的。其實,Scripting.FileSystemObject組件是可以改名的,這樣會增加服務器的安全性,我們可以在注冊表中更改,方法如下:
開始菜單->運行->regedit->確定,依次找到HKEY_CLASSES_ROOT\Scripting.FileSystemObject,右鍵“重命名”,再執行第一步注冊下scrrun.dll文件即可。注意一點,你寫程序的時候要以這個新名稱創建對象,否則會報錯。7)附:IIS自帶組件
有沒有發現一點,這些問題的原因都出在IIS自身組件身上,下面提供下常見的IIS組件,以供參考:
MSWC.AdRotator
MSWC.BrowserType
MSWC.NextLink
MSWC.Tools
MSWC.Status
MSWC.Counters
SWC.PermissionChecker
WScript.Shell
Microsoft.XMLHTTP
Scripting.FileSystemObject
ADODB.Connection小結一下,關於ActiveX不能創建Scripting.FileSystemObject對象的類似問題,大體上解決辦法都是類似的,主要是思想要清晰:首先考慮組件注冊問題,其次是組件權限問題,如果服務器配置沒有問題的話,那就仔細檢查一下你的程序源碼吧!