iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
自我挑戰組

Bug仔的筆記本系列 第 4

C#、ASP.NET 在操作 EXCEL 發生錯誤 Retrieving the COM class factory for component with CLSID

  • 分享至 

  • xImage
  •  

這是我以前在一間水果遊戲公司駐點開發的時候,在串他們產報表服務遇到的錯誤。當下以為自己 Cell 服務的方法錯了,試跑一下前人寫的其他幾支有用報表的服務,結果都遇到一樣的錯誤訊息。

錯誤訊息:

<string xmlns="Excel">Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 800703fa Illegal operation attempted on a registry key that has been marked for deletion. (Exception from HRESULT: 0x800703FA).</string>

這個問題偶爾會碰到,然後公司某個人重開一下 Server 就好了。當然,這解法很瞎,而且 Server 能不能重開也不是我能決定的。後來問了一下他們的資深工程師,結果是幫我在十分鐘內重裝好 Office。當然以上都不是正確的解法。我最後跑去解這個問題,是因為我交付給 SA 時報表產不出來。驗收不通過,去翻通知信一堆Error信才知道服務已經死了兩天了......。想到這種大家都在用,卻不知道誰寫的三不管服務要 Debug 就麻煩。誒,感覺被迫背了一個你把服務搞壞的鍋。

進入正文

原因

這個產報表服務是使用本機的 Office 內提供的 Excel 轉 PDF 的功能,在 ASP.NET 上可以使用 Microsoft.Office.Interop.Excel 這個套件,來操作本機的 Office 來進行 Excel 轉 PDF。

而我們的 WebService(就是 ASP.NET) 運行在 IIS 上。這個問題的原因是 IIS 上的一個設定沒有打開,打開後就不會再出錯了。

  1. 找出你的 WebService 是使用哪一個應用程式集區(Application Pool)
    https://ithelp.ithome.com.tw/upload/images/20220919/20120420GyXJg43GVX.png

https://ithelp.ithome.com.tw/upload/images/20220919/20120420Oj7n9ywqNn.png

  1. 去該應用程式集區進階設定
    https://ithelp.ithome.com.tw/upload/images/20220919/20120420rA0LHr9DEC.png

  2. 載入使用者設定檔(Load User Profile)設為True
    https://ithelp.ithome.com.tw/upload/images/20220919/20120420HrsWvfUzn7.png

看這個解法你直覺會知道,是因為沒有使用者權限,造成的問題,而我們 IIS 上剛好有指定識別(Identity)用的帳號。
另外補充,因為 Office 有用到微軟的 COM 服務,COM類沒有使用者權限的這類問題,也會出現這樣的錯誤訊息。

參考資料:
https://learn.microsoft.com/zh-tw/sharepoint/troubleshoot/administration/retrieving-com-class-factory-for-component-failed
https://stackoverflow.com/questions/881132/retrieving-the-com-class-factory-for-component-failed


上一篇
網站發布時,設定 Web.Config 依組態做內容替換
下一篇
找不到 roslyn\csc.exe 的一部分
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言