![](/img/trans.png)
[英]Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE) in c# when making excel application
[英]Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))
我正在嘗試使用Microsoft.Office.Interop.Excel.Workbook
類在服務器端將 .xls 文件轉換為 .xlsx 文件,如下所示:
workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
我收到以下錯誤:
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). : System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at CALLING_METHOD_IN_MY_LIBRARY_HERE...
問題是這個錯誤只發生在登台服務器上; 在我的本地機器上它工作正常。
我在登台服務器上嘗試過的事情:
2)展開組件服務“->”計算機“->“我的電腦”->“DCOM配置”
3) 找到“Microsoft Excel 應用程序”。
4) 右鍵打開屬性對話框
5)點擊“安全”選項卡,
6)》Launch and Activation Permissions、配置權限、已添加權限-身份在Adminstrator用戶(This User)、Interactive User和Launching Users下運行
7)。 啟動和激活權限 + 訪問權限 + 配置權限 => 添加 IIS_IUSRS + 完全控制網絡服務**
2.在我的本地機器上更改了將 .xls 文件從“任何 CPU”轉換為“x86”的項目的構建,並在服務器上發布了這個庫。
有人想出如何解決這個問題嗎? 我現在正在努力解決這個問題 2 天。
使用 DCOMCNFG.exe。 打開它並轉到:組件服務 -> 計算機 -> 我的電腦 -> DCOM 配置 -> Microsoft Excel 應用程序。
打開屬性,選擇身份選項卡並選擇交互式用戶。
我在別處找到了解決方案。
執行以下操作確實解決了我的問題:
使用 DCOMCNFG.exe。 打開它並轉到:組件服務 -> 計算機 -> 我的電腦 -> DCOM 配置 -> Microsoft Excel 應用程序。 打開屬性,選擇身份選項卡並選擇交互式用戶。
但是- 每隔幾分鍾就會出現問題!
經過數小時試圖找出原因后,我注意到我的服務器有數百個打開的 WINWORD.EXE 進程。 這導致了內存問題,導致exception from hresult 0x80080005
錯誤異常。
好吧,太愚蠢了,我忘記編寫代碼來關閉互操作應用程序。 一旦我解決了這個問題,錯誤就消失了。
doc.Close(false);
Marshal.ReleaseComObject(doc);
word.Quit();
Marshal.ReleaseComObject(word);
我發現這篇文章更深入地討論了這個問題如果這有幫助,錯誤“80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))”可能由於以下原因發生:
我用這個解決方案解決了這個問題:右鍵單擊組件服務/計算機/DCOM 配置/Microsoft Word97 - 2003 文檔屬性/常規選項卡
設置身份驗證級別:無
TLDR; 對我來說,修復方法是從文件 -> 選項 -> 保存禁用自動恢復,然后丟棄所有自動恢復的文件。 看來這是自動恢復文件的數量,這是根本原因。
背景我循環了很多打開/關閉/計算周期。 C# 應用程序無法定期打開工作簿並顯示以下錯誤。
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
應用程序反復拋出此錯誤並停留在此狀態,直到從 Excel 中清除自動恢復的文件。
另一個症狀隨之而來; 當我嘗試打開 Excel 應用程序(就像創建一個新的工作簿,而不是打開現有的工作簿)時,它需要很長時間才能旋轉 cpu 周期。 它最終打開,左側的“恢復的文件”窗格中列出了大量文件。
I 使用按鈕Close
窗格,然后丟棄所有文件。 在此過程接近即時后再次重新打開 Excel。 該應用程序從此再次正常運行。
通過為服務“允許桌面交互”為我解決了同樣的問題。 (在登錄選項卡上的 tomcat6w 配置工具中)
開始 -> 運行 (Windows+R)
輸入:dcomcnfg -32(按回車)這應該打開組件服務
展開組件服務、計算機、我的電腦、DCOM 配置
向下滾動到“Microsoft Excel 應用程序”
右鍵單擊,選擇屬性,轉到安全選項卡
編輯訪問權限
點擊添加
鍵入 <Computer_Name>/IIS_IUSRS(或轉到 Locations,選擇計算機名稱 -如果使用域,默認情況下,它將搜索域並且不會找到 IIS_IUSRS )
確保為“本地訪問”選中“允許”復選框
單擊確定,再次單擊確定(無需重新啟動)
Windows 更新將重置一次
嘗試在workBook.open和workBook.SaveAs兩個方法后添加Thread.Sleep方法,比如Thread.Sleep(2000)2秒。 如果您的 Excel 文件有很多格式,請嘗試再延長幾秒鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.