2012-01-04 42 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

相关问题