2012-01-04 76 views
1

我寫了一個C#程序,它從.xlsx文件導入產品列表並讓用戶根據該產品列表創建訂單。 用戶完成後,程序會根據訂單建立一個或多個系統規格。這些規格將寫入.docx文件。我在計算機上安裝了Office 2007,並且正在使用Microsoft.Office.Interop.Excel和Microsoft.Office.Interop.Word命名空間。C#Word自動化使Windows資源管理器崩潰

問題: 運行該程序後,Windows資源管理器崩潰很頻繁,必須重新啓動。在導航到文件夾或右鍵單擊文件夾等時會發生這種情況。 在程序關閉之後也會發生這種情況,停止的唯一方法是重新啓動計算機。它似乎只發生在創建輸出文件(.docx)時。如果我啓動程序並像通常那樣使用它,但是不創建word文件,問題似乎不會發生。 在程序創建輸出文件後,Word將「可見」給用戶進行手動編輯。用戶在編輯完文檔後關閉Word應用程序。

什麼使Windows資源管理器在運行字自動操作時崩潰? 我真的需要這方面的幫助。歡迎任何建議。

+0

作爲開始,請檢查您的任務管理器以查看WINWORD.exe正在運行多少個實例(如果有)。 編輯:請看下面的Vinzz答案,他得到的是同樣的東西,除非有更詳盡的答案。 – 2012-01-04 08:33:18

+0

沒有運行Winword.exe的實例。程序結束後,用戶手動關閉Word應用程序。在此之後,winword.exe從任務管理器中消失。 – 2012-01-05 08:59:58

回答

2

執行後,你有沒有ghost excel.exe和word.exe進程?

這些鬼可能會使系統不穩定。

您可能無法正確釋放通過自動化實例化的COM對象。

對您實例化的每個COM對象使用Marshal.ReleaseComObject(yourobj);。我知道這是一種真正的痛苦。

注意:一定不要在不知不覺中實例化COM對象:

mySheet = myExcelObject.workbooks[0].Sheet[0]將不只是實例化一個表對象,也是一個工作簿對象。

經驗法則:永遠不會在COM對象(foo.bar.baz)上使用輔助屬性並釋放所有內容。

最後一點:沒有在服務器上使用office automation at all,這是不好的,每微軟自己的話說,有全面管理libraries了點。

+0

如果有任何「鬼」,我應該看不到在任務管理器進程列表中運行的單詞或excel嗎?我試圖早些發佈excel COM對象,因爲我注意到Excel仍然在任務管理器中運行。直到幾天前我才知道「鬼」,所以我不確定我是否做得對,但是沒有任何Excel在任務管理器中運行。 Word由用戶手動關閉,這意味着我不必擺脫「WORD-ghosts」。 – 2012-01-05 08:57:24

+0

好吧,在這種情況下,幽靈確實是任務管理器中剩餘的excel.exe進程可見性。如果您沒有任何剩餘的流程,問題可能在其他地方。你的程序是否正常終止?你能刪除生成的.docx嗎?如果不是的話,你的程序仍然有一個句柄。 – Vinzz 2012-01-05 13:43:31

相關問題