關於ActiveX不能創建Scripting.FileSystemObject物件的類似問題,大體上解決辦法都是類似的,主要是思想要清晰:首先考慮組件註冊問題,其次是組件權限問題,如果伺服器配置沒有問題的話,那就仔細檢查一下你的程式原始碼吧
今天遇到個問題,一個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物件的類似問題,大體上解決辦法都是類似的,主要是思想要清晰:首先考慮組件註冊問題,其次是組件權限問題,如果伺服器配置沒有問題的話,那就仔細檢查一下你的程式原始碼吧!