[KB]Interop.Excel 與 Access Denied
8/6/2008 5:03:00 PM

[技術]KB

好好的程式,跑到了農曆七月,就出現問題…

公司之前一位高手寫的程式,在 Web Server 上,接受 User 上傳 Excel 檔案後,啟動 Excel 進行拆解並存入資料庫之中,

很神奇的地方是,壞掉的原因為:

Access denied (E_ACCESSDENIED (0x80070005):拒絕存取

但只壞了一半,如果使用原本執行緒開啟 Excel 存入來自資料庫的資料後讓 User 下載 Excel 是 OK 的哦,只有當開啟另外一個執行緒做長時間處理才會發生,

看完了黑暗大哥的茶包射手專欄後,也依樣畫葫蘆地拿了 FileMonProcMon(Access Denied 嘛~簡單~簡單~),呃…

完全沒有 File Access Denied 的問題,都是 SUCCESS。

        後來發現可能是啟動 Excel.Application 這個元件的權限問題,開啟了 DOM Config (註一),選擇 [Microsoft Excel Application],

 

image

 

當然,以上圖片的範例,將存取、啟動權都設給 Everyone 是很蠢的一件事,請依執行身份付與權限(e.g. Network Service or IUser_XXXXXX)

設定好後,再啟動程式後就 OK 囉。

另外提到一點,這個跟 ASP CreateObject 失敗也是一樣的問題,都是在於啟動 Excel.Appliction 物件的身份問題(詳見附錄文章)。

 

**Server 端處理 Excel 推薦的工具**

讀取 Excel 可以使用  Excel for ADO -- KB278973 (http://support.microsoft.com/kb/278973/) ExcelADO 示範使用 ADO 在 Excel 活頁簿讀取和寫入資料的方法

匯出 Excel 可以使用這個 ----  CarlosAg Excel Xml Writer Library (http://www.carlosag.net/Tools/ExcelXmlWriter/Default.aspx)

 

備註:

一、Windows 2000/2003 需要在[開始]->[執行]鍵入 DCOMCNFG.exe 後開啟。Windows 2003/XP 請進入[元件服務]->[DCOM設定]

**推薦的文章**

MSFT-KB-Office 伺服器端自動化的考量因素

http://support.microsoft.com/?kbid=257757

http://support.microsoft.com/kb/257757/en-us (英文版)

===========================================================================================================================================

CreateObject/CoCreateInstance 會傳回下列執行階段錯誤訊息,且無法啟動自動化。
在 Microsoft Visual Basic (VB) 或 ASP 中:

訊息 1

Run-time error '429':ActiveX component cannot create object (執行階段錯誤 '429':ActiveX 元件無法建立物件)

訊息 2

Run-time error '70':Permission denied (執行階段錯誤 '70':使用權限被拒)

在 Microsoft Visual C 或 Visual C++ 中:

訊息 1

CO_E_SERVER_EXEC_FAILURE (0x80080005):Server execution failed (CO_E_SERVER_EXEC_FAILURE (0x80080005):伺服器執行失敗)


訊息 2

E_ACCESSDENIED (0x80070005):Access denied (E_ACCESSDENIED (0x80070005):拒絕存取)

會出現這些錯誤的原因,是因為伺服器端程式碼是在沒有使用者設定檔的情況下執行,或者為啟動環境指定的使用者身分識別沒有適當的 DCOM 權限

===========================================================================================================================================


[技術]KB

永久網址 | Comments (2) | 閱讀(8625) |

Comments (2) -

8/27/2008 10:51:54 PM #

Thanks for the info. And the command is "DCOMCNFG" on win2000 server and win2003 server.

shawn | Reply

8/28/2008 6:07:48 AM #

thanks shawn.

I will correct this error.

michadel | Reply

Add comment


(不會對外公開)

biuquote
Loading