簡體   English   中英

服務器執行失敗(來自 HRESULT 的異常:0x80080005 (CO_E_SERVER_EXEC_FAILURE))

[英]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...

問題是這個錯誤只發生在登台服務器上; 在我的本地機器上它工作正常。

我在登台服務器上嘗試過的事情:

  1. **1) 運行 dcomcnfg 打開組件服務

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))”可能由於以下原因發生:

  1. 機器CPU負載高,進程啟動時間長,120秒內無法執行CoRegisterClassObjects()。
  2. COM 服務器沒有注冊正確的類 ID。
  3. COM 服務器當前正在停止,並且 CoCreateInstance 和 COM 服務器停止部分之間存在競爭條件。
  4. COM 服務器的啟動方式存在安全問題(此頁面似乎建議密碼拼寫錯誤或缺少“以批處理作業身份登錄”權限對“運行方式..”COM 服務器,但無論如何我建議重新驗證這一點您的特定配置的信息)

https://blogs.msdn.microsoft.com/adioltean/2005/06/24/when-cocreateinstance-returns-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM