2016-09-11 109 views
0

我創建一個Windows服務,將創建Excel表,我用Microsoft.Office.Interop.Excel但得到這個異常 Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE 我已附加一個照片這裏Microsoft.Office.Interop.Excel錯誤與Windows服務

Exception photo attached

public void insertIntoSheet(string Name, DataTable dt) 
{ 
    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 

    if (xlApp == null) 
    { 
     //MessageBox.Show("Excel is not properly installed!!"); 
     return; 
    } 
    Excel.Workbook xlWorkBook; 
    Excel.Worksheet xlWorkSheet; 
    object misValue = System.Reflection.Missing.Value; 

    xlWorkBook = xlApp.Workbooks.Add(misValue); 
    xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
    for (int i = 1, j = 0; j < dt.Rows.Count; i++, j++) 
    { 
     xlWorkSheet.Cells[i, 1] = dt.Rows[j][0].ToString(); 
     xlWorkSheet.Cells[i, 2] = dt.Rows[j][1].ToString(); 
     xlWorkSheet.Cells[i, 3] = dt.Rows[j][2].ToString(); 
     xlWorkSheet.Cells[i, 4] = dt.Rows[j][3].ToString(); 
     xlWorkSheet.Cells[i, 5] = dt.Rows[j][4].ToString(); 
     xlWorkSheet.Cells[i, 6] = dt.Rows[j][5].ToString(); 
    } 
    //xlWorkSheet.Cells[1, 1] = "Sheet 1 content"; 

    xlWorkBook.SaveAs(String.Format("d:\\{0}.xls", Name), Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
    xlWorkBook.Close(true, misValue, misValue); 
    xlApp.Quit(); 

    releaseObject(xlWorkSheet); 
    releaseObject(xlWorkBook); 
    releaseObject(xlApp); 
    Class_Library.WriteErrorLog("Inserting the sheet method finished"); 
    //MessageBox.Show("Excel file created , you can find the file d:\\csharp-Excel.xls"); 
} 

private void releaseObject(object obj) 
{ 
    try 
    { 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
     obj = null; 
    } 
    catch (Exception ex) 
    { 
     obj = null; 
     Class_Library.WriteErrorLog(ex.Message); 
     //MessageBox.Show("Exception Occured while releasing object " + ex.ToString()); 
    } 
    finally 
    { 
     GC.Collect(); 
    } 
} 

注:我使用相同的代碼在Windows應用程序的測試和它的工作如預期。 我試着寫Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();並且還試圖使用Excel的名稱只喜歡Excel.Application xlApp = new Excel.Application();

+1

Office程序「對VBA項目對象模型的信任訪問」是與服務會議高度不相容和Microsoft *強烈*不鼓勵這種做法。錯誤代碼只是告訴你它在啓動時崩潰,它不會告訴你它爲什麼崩潰。對此有許多可能的原因,沒有你可以看到。這就是爲什麼微軟不鼓勵它:) –

+0

完全匹配,但它確實在Windows應用程序上使用按鈕點擊操作什麼會阻止它在Windows服務 – Skimo

+1

然後它在用戶的會話中運行,Office程序當然被設計爲支持,因爲這就是他們他們總是跑的方式。服務會話最大的掛斷是一個非常小的桌面堆(因爲服務不需要創建用戶界面),它們運行的​​用戶帳戶出現問題,在以後的Office版本中檢測到它們在會話0中運行時出現無法識別的打印故障和對策並拒絕啓動。 –

回答

0

嘗試編輯DCOMConfig

1.In DCOMCNFG,右鍵單擊我的電腦,選擇屬性。

2.轉到組件/我的電腦/ DCOMConfig

3。至Microsoft Excel應用程序性能安全

4.In啓動和激活權限,單擊「Custamize」,並添加網絡 服務於它,給它「本地啓動」和「本地激活」權限。給予相同的作爲訪問權限和配置權限按確定,就是這樣。你現在可以運行我的應用程序。

+0

我做了你告訴我添加一個網絡服務並給了它所有的權限,並給每個組和每個人所有的權限可能:)但仍然是一個例外。感謝您的時間@mwisnicki – Skimo

0

轉到Excel的選項/信任中心/宏設置,並檢查一般

+0

感謝您的時間@GeorgeT我做了你告訴我的,但仍然是同樣的例外。 – Skimo