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用戶權限ui

   

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

 

三個都要選擇自定義,並配置成everyone,以下操做:3d

配置「標識」,選擇「下列用戶」,配置成Administrator用戶,密碼爲該用戶的登陸密碼:code

 

 

異常2:blog

    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) 的異常。
相關文章
相關標籤/搜索