2013-05-05 23 views
2

我正在使用VSTO Powerpoint API來自動創建Powerpoint文件。我所發現的是,使用最基本的調用創建從Windows 7系統上的Web應用程序一個PowerPoint文件會導致內存不足的錯誤(即操縱打開的文件也未能其它VSTO電話):內存不足故障自動化VSTO Powerpoint API

PowerPoint.Presentation presentation = _ppPresentations.Add(Office.MsoTriState.msoTrue); 
     string outputDirectory= getOutputDirectory(); 
     presentation.SaveAs(outputDirectory+ "\\CreateSlideTestOutput.pptx", 
          PowerPoint.PpSaveAsFileType.ppSaveAsDefault, Office.MsoTriState.msoTrue); 

我收到的錯誤是「不足的內存」在正在進行操縱文件的任何VSTO API調用(例如,保存或添加幻燈片到PowerPoint中)。

但是,我發現如果我在單元測試或用戶可執行文件(.exe)中運行相同的代碼,添加內容,操作和保存Powerpoint文件都沒有問題。

但是,當我嘗試創建Windows服務以自動執行用戶可執行文件中使用的相同代碼時,我又收到了內存不足錯誤。我可以在我的服務中設置一個斷點,並查看它在從我的Web應用程序調用時發生失敗的完全相同的VSTO API調用時失敗。

有沒有人有解釋爲什麼用戶可執行線程可以執行VSTO API調用而沒有任何問題(以及內存中沒有可觀察的跳轉),而我的應用程序池線程或Windows服務線程總是會運行內存不足錯誤?

+0

如果您在用戶帳戶下運行Windows服務? – 2013-05-07 14:27:52

+0

@BrijeshMishra我遇到了同樣的問題,無論是我的用戶帳戶還是其他任何 – stevebot 2013-05-07 15:24:55

+0

http://msdn.microsoft.com/en-us/library/aa679807%28office.11​​%29.aspx有一些清理工作時使用這些可能有助於解決錯誤的API - 你在嘗試嗎? – 2013-06-24 17:02:49

回答

1

http://support.microsoft.com/kb/257757

自動化Office文檔(與互操作的.dll),而不需要用戶上下文是不是「穩定」由MS所支持。他們建議使用類似的OpenXML SDK另一種解決方案:

http://www.microsoft.com/en-us/download/details.aspx?id=5124

+0

有趣的是,服務器端絕對不支持VSTO API。在閱讀該知識庫後,我仍不確定爲什麼會發生內存不足問題。 openXMl SDK看起來是唯一真正的選擇。 – stevebot 2013-06-29 05:10:48

+0

但是當我們必須使用SaveAs()將windows ppt轉換爲pdf時,我們能做些什麼?因爲OpenXML-SDK不提供這樣的api .. – rohitvk 2014-02-28 07:17:48