【茶包射手專欄】ADO.NET開啟Excel傳回未知錯誤0x80004005

【問題】

使用"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\SomeExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;'"的OleDbConnection方式開啟Excel檔案,在本機執行正常,在Server上卻得到0x80004005錯誤,訊息為"未知的錯誤"

【排除步驟】

  1. 檢查Server上的目錄,該檔案確實存在。
  2. 由於0x800004005是典型的Access Denied訊息,但使用Process Monitor監看,卻沒有發現存取檔案/Registry被拒的記錄。
  3. Google了一下,沒找到完全相符的情境,但有篇文章提到了system32/msexcl40.dll,它是Jet 4.0的相關檔案,註冊失效時會傳回"Could not find installable ISAM"訊息,與本次遇到的訊息並不同,但依該文作者的經驗,雖然訊息不同,但試了有效。所以... 我當然要試試,又不會少塊肉。
  4. regsvr32 msexcl40.dll後再試,仍然無效。但IISRESET後再試則成功。

由於先後做了regsvr32 msexcel40.dll及IISREST後修復了這個問題,無法確定何者是關鍵(或者兩者都為必須)。為了驗證,regsvr32 /u msexcl40.dll後再試,會得到Could not find installable ISAM,亦非原來的錯誤訊息。

問題解了,但真實原因未能釐清。總之,有相同情境的朋友,不坊試試以上步驟,如有不同發現,歡迎留言回饋給我。

Published 21 February 2008 08:05 PM 由 Jeffrey
Filed under: ,


意見

# steve said on 21 February, 2008 05:39 PM

曾經遇到的情況也類似

也是開Excel的問題,但我沒記下錯誤訊息

通常最後都是IISRESET就好了

試著用Debug Diagnostic tool去分析dump

發現都有Memory Fragment的情況

我覺得可能因為程式寫太爛,ADO常常開了沒關

最後導致Memory Fragment,沒有夠大的記憶體區塊給程式放Excel資料

因此才會IISRESET就好了

# steve said on 21 February, 2008 05:45 PM

另外,這一篇也有些訊息頗有意思

www.wretch.cc/.../jjgg&article_id=11850315

他的問題是出在%WinDir%\中的temp資料夾的權限

雖然我覺得版大遇到的問題並不是這個

否則不會IISRESET就復原

但讓我聯想到Process Monitor的filter裡面有一些預設的exclude filter

那如果問題是出在這些exclude的系統目錄裏呢?

# Jeffrey said on 21 February, 2008 10:12 PM

to steve,

ProcMon是否被預設Filter排除掉出錯的Log? 這個點子不錯,剛才仔細看了一下預設的Exclude Filter,倒沒有看到可疑的目錄,預設排除的程式則為system及procmon,procmon是局外人,system應有Local System權限,看來都不像疑犯。

不過,下回有找不到的情形,我會記得朝這個方向思考看看,謝謝囉!

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 

請輸入以上的數字:

【請注意】意見送出後可能需要幾分鐘才會出現在網頁上,請耐心等候。

搜尋

Go

<February 2008>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678
 
RSS
最新回應


BlogLook Score and Rank

Syndication