2013-05-05 59 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