IIS中使用Microsoft.Office.Interop.Excel 常見問題:RPC 服務器不可用。 (異常來自 HRESULT:0x800706BA) 的異常。等


IIS中使用Microsoft.Office.Interop.Excel

異常1:

檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失 敗,原因是出現以下錯誤: 80080005。

解決方案:

A、 檢查IIS發布的網站上的用戶組是否有Administrators用戶權限

   

B、 配置COM組件,用win+r命令打開命令運行窗口,輸入Dcomcnfg命令,進入組件服務配置界面,找到“Microsoft Excel Application”,配置“安全”和“標識”:

 

三個都要選擇自定義,並配置成everyone,如下操作:

配置“標識”,選擇“下列用戶”,配置成Administrator用戶,密碼為該用戶的登錄密碼:

 

 

異常2:

    RPC 服務器不可用。 (異常來自 HRESULT:0x800706BA) 

解決方案:

    下面的代碼在有些版本的Windows系統是不會拋出異常:

            Excel.Application excleApp = new Excel.Application();
            Excel.Workbook workbook = excleApp.Workbooks.Open(reportFilePath);
            try
            {
//... }
catch (Exception ex) { throw new Exception(ex.Message); } finally { workbook.Save(); //資源清理 excleApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excleApp); GC.Collect(); }

     但是有些Windows版本就會有問題:

會拋出

     RPC 服務器不可用。 (異常來自 HRESULT:0x800706BA) 的異常。

     查看有問題的Windows 版本的資源管理器會發現:

      

 不管調用Excel.Application excleApp = new Excel.Application()多少次; 都只產生一個EXCEl.ExE進程。

 

而在不拋出異常的Windows版本上,每調用Excel.Application excleApp = new Excel.Application()一次; 就會產生一個新EXCEl.ExE進程。

 

如下代碼則可以正常運行:

            Excel.Application excleApp = new Excel.Application();
            Excel.Workbook workbook = excleApp.Workbooks.Open(reportFilePath);
            try
            {
                WriteExcelReportForSaleProductCashFlow(workbook, createReportParams);
                WriteExcelReportForSubjectLv2(excleApp,workbook, createReportParams);
                WriteForOwnCashFlowReport(workbook, createReportParams.ProjectSolutionId);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {

                workbook.Save();
                //資源清理
                //excleApp.Quit();
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(excleApp);
                GC.Collect();
            }

     將代碼

excleApp.Quit();

注釋掉就不會拋出異常:RPC 服務器不可用。 (異常來自 HRESULT:0x800706BA) 的異常。



 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM