2009年8月5日 星期三

msxml3.dll 錯誤 '800c000e'

最近同事反應他的ASP程式執行出錯,錯誤訊息如下,之前是正常的說
msxml3.dll 錯誤 '800c000e'
發生安全性問題。

程式碼簡略如下
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")

objXMLHTTP.Open "GET", URL, flase
objXMLHTTP.setRequestHeader "Content-Type", "text/html"
objXMLHTTP.setRequestHeader "charset", "big5"
objXMLHTTP.send 

剛好最近系統移轉,想說會不會是msxml3.dll沒裝,查了一下在 %windir%\system32下是有的,
再用regsvr32重新註冊一下好了,
結果錯誤還是一樣,難道要設安全性嗎?我倒是沒設過
,想說去下載msxml3重裝,結果錯誤還是一樣,真是見鬼

忽然想起該不會是找不到Microsoft.XMLHTTP吧,
因為CreateObject函數會先檢查註冊表HKEY_CLASSES_ROOT\Microsoft.XMLHTTP 下的子鍵,
一查果然HKEY_CLASSES_ROOT下沒有Microsoft.XMLHTTP囉,
那反查一下msxml3.dll在HKEY_CLASSES_ROOTHKEY_CLASSES_ROOT\CLSID下的哪個機碼是跟XMLHTTP有關的,
結果在HKEY_CLASSES_ROOT\CLSID\{AFB40FFD-B609-40A3-9828-F88BBE11E4E3}下發現Server XML HTTP 3.0囉,
再用這個CLSID追查下去,最後就查到HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.3.0

可見是設錯啦

解決辦法
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
換成
Set objXMLHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")

0 意見:

張貼留言