1. 程式人生 > 程式設計 >msxml3.dll 錯誤 800c0019 系統錯誤:-2146697191解決方法

msxml3.dll 錯誤 800c0019 系統錯誤:-2146697191解決方法

一個asp後臺使用了XMLHTTP元件的頁面無法無法生成靜態頁面了,執行時提示"msxml3.dll 錯誤 '800c0019′" 系統錯誤:-2146697191 請查詢行 數。之前一直以為是伺服器配置或資料庫的原因,或者IE瀏覽器有問題,因為這是一個XMLHTTP物件元件,可能我們前幾天更新了系統補丁升級了xmlhttp導致。現在終於找到了解決方案、摸清了原因。

解決方法:

1、找到錯誤行,返回檔案中例項化物件程式碼

set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")

2、一般在msxml2.6以下版本使用

set objXmlHttp = Server.CreateObject("MSXML2.XMLHTTP")

3、msxml3.dll+版本支援使用如下程式碼

Set http=Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")

最後,建議使用第三步驟中的程式碼。

下面是其他網友的補充

msxml3.dll 錯誤 '800c0008',系統錯誤: -2146697208的解決方案

msxml3.dll 錯誤 '800c0005'

The system cannot locate the resource specified.

/plugins.asp??А 165
這個情況一般出現在採集資訊或用XMLHTTP靜態更新網頁的時候會出現這個問題,以前出現類似的錯誤我都是用

set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP") '一般在msxml2.6以下版本使用
' set objXmlHttp = Server.CreateObject("MSXML2.XMLHTTP") '受msxml3.dll+支援

替換著使用,現在卻怎麼都報錯。

搜尋了網上我所知道所有的技術論壇和搜尋引擎,引起這樣的問題可能存在多種情況,下面總結一下:

(一)那就是最基本的了,你的伺服器不支援xmlhttp或元件版本態低,需要下載相應的元件。這個一般伺服器都不需要的,大多數情況下都支援xmlhttp,所以這個情況較少。
(二)msxml3.dll檔案可能損壞或該檔案使用許可權不夠(許可權這個情況可能性較小),如果是檔案損壞的話,你可以到網上下載相應系統環境的msxml3.dll檔案替換下(2003系統好像在c:\\windows\system32下),需要關閉相應的服務例如iis等才能覆蓋。

(三)防火強或防毒軟體禁用了相應的埠,具體該怎麼設定要根據不同的軟體而定,你可以試著關閉防火牆或防毒軟體後再測試確定是否是這個問題。
(四)重新註冊下該元件試試看。開始>>執行: regsvr32 msxml3.dll
(五)DNS解析錯誤,檢查你的網路設定或正確的域名解析訪問
(六)檢查你的IP篩選的設定(這個不是太瞭解)
(七)對方資源失效,比如採集某條資訊時,對方該條資訊不存在導致程式終止錯誤,也可能是這種情況。這種錯誤都是出現在呼叫了 xmlhttp 元件的 Open方法,接著再用Send方法後造成的。當open方法的的 url 引數無法訪問時,就會造成 8000005 錯誤。並且一旦產生這種錯誤,就會導致應用程式終止,無法繼續操作。大多說的程式是這樣寫的:

Function functionName(pararm ...)
Dim Http
Set Http=Server.CreateObject("MSXML2.XMLHTTP.4.0")
With Http
.open "GET",HttpUrl,False
.Send
End With
If Http.Readystate<>4 then
Set Http=Nothing
......
Exit function
End if
End Function

大多數的程式都是運用xmlhttp的 Readystate 屬性判斷從伺服器的返回狀態。其實這樣未必適合,很多時候用ReadyState 屬性判斷並不能真正檢測到程式流程中的錯誤。當遇到錯誤的時候,仍然會致使程式終止。其實修改一下上面的程式碼,完全可以實現跳過程式執行過程中遇到的錯誤,使程式繼續執行。修改程式碼如下:

Function functionName(pararm ...)
Dim Http
Set Http=Server.CreateObject("MSXML2.XMLHTTP.4.0")
With Http
.open "GET",False
.Send
End With
On Error Resume Next
If Http.Status<>200 then
Set Http=Nothing
......
Exit function
End if
End Function

Send 方法產生錯誤的時候,ReadyState的值或許為4,但Status的返回值就一定不是200的。呵呵,我經過多次跟蹤ReadyState和Status的值得到以前結果。可能會有差錯,目前我還沒有發現。
希望以上程式解決方案能夠幫到你!!如果朋友你有更好的解決方法,請一定告訴我喲。

我是以MSXML2.XMLHTTP.4.0為例說明的程式,也適合其它版本的XMLHTTP元件。想檢查的你係統中已經安裝了哪些版本的XMLHTTP元件,請到登錄檔的 HKEY_CLASSES_ROOT 下查詢。

(八)進入伺服器設定您的IE安全選項(把等級設中或低試試看),在受信任網站里加入您要獲取的域名即可。

(九)以上方法我基本都看過之後也試過了,不過都沒解決。於是去微軟下載了MSXML 4.0 Service Pack 2 (Microsoft XML Core Services)和Hotfix for MSXML 4.0 Service Pack 2 - KB832414 - 簡體中文(KB832414_MSXML4.0_x86.exe)安裝後,問題終於解決了!!!

(十)如果你的情況,在我上面方法都解決不了,那就太背了,你繼續到網上找其它可能出現的情況吧,如果不想繼續找了就重灌你的iis或乾脆重灌系統(做這個之前你可以試著重新啟動一下系統看看,或許可能大概彷彿幸運的話又可以使用了