C# Word自动化使Windows资源管理器崩溃
我编写了一个C#程序,它从.xlsx文件导入一个产品列表,并允许用户基于该产品列表创建订单。 用户完成后,程序将根据订单构建一个或多个系统规范。这些规范将写入.docx文件。我已在计算机上安装了Office 2007,并且正在使用Microsoft.Office.Interop.Excel和Microsoft.Office.Interop.Word命名空间 问题是: 运行程序后,Windows资源管理器经常崩溃,必须重新启动。在文件夹中导航或右键单击文件夹等时会发生这种情况。 程序关闭后也会发生这种情况,使其停止的唯一解决方案是重新启动计算机。似乎只有在创建了输出文件(.docx)后才会发生这种情况。如果我像平常一样启动程序并使用它,但不创建word文件,那么问题似乎不会发生。 程序创建输出文件后,Word对用户“可见”以进行手动编辑。用户在编辑完文档后关闭word应用程序 运行word自动化时,什么会使Windows资源管理器崩溃?C# Word自动化使Windows资源管理器崩溃,c#,crash,ms-word,ms-office,windows-explorer,C#,Crash,Ms Word,Ms Office,Windows Explorer,我编写了一个C#程序,它从.xlsx文件导入一个产品列表,并允许用户基于该产品列表创建订单。 用户完成后,程序将根据订单构建一个或多个系统规范。这些规范将写入.docx文件。我已在计算机上安装了Office 2007,并且正在使用Microsoft.Office.Interop.Excel和Microsoft.Office.Interop.Word命名空间 问题是: 运行程序后,Windows资源管理器经常崩溃,必须重新启动。在文件夹中导航或右键单击文件夹等时会发生这种情况。 程序关闭后也会发生
在这件事上我真的需要帮助。欢迎提出任何建议。执行后,是否还有ghost excel.exe和word.exe进程 这些幽灵很可能使系统不稳定 您可能没有正确释放通过自动化实例化的COM对象 使用
Marshal.ReleaseComObject(yourobj)在您实例化的每个COM对象上编写>代码。我知道这真的很痛苦
注意:请确保不要在不知道的情况下实例化COM对象:
mySheet=myExcelObject.workbooks[0].Sheet[0]
不仅实例化工作表对象,还实例化工作簿对象
经验法则:永远不要在COM对象(foo.bar.baz)上使用辅助属性并释放所有内容
最后一点注意:不要在服务器上使用,这是不好的,按照Microsoft自己的话来说,这是完全受管理的。首先,检查任务管理器以查看有多少WINWORD.exe实例正在运行(如果有的话)。编辑:只需看看下面的Vinzz答案,他和我的答案是一样的,只是有一个更彻底的答案。没有运行Winword.exe的实例。程序完成后,用户手动关闭word应用程序。在此之后,winword.exe将从任务管理器中消失。如果存在任何“重影”,我是否应该在任务管理器进程列表中看到word或excel正在运行?我之前曾尝试释放excel COM对象,因为我注意到excel仍在任务管理器中运行。直到几天前我才知道“鬼魂”,所以我不确定我是否做对了,但任务管理器中不再运行Excel。Word由用户手动关闭,这意味着我不必清除“Word重影”。在本例中,重影实际上是任务管理器中剩余的excel.exe进程。如果您没有任何剩余流程,问题可能出在其他地方。您的程序是否正确终止?您是否能够删除生成的.docx文件?如果没有,程序中仍然有一个句柄。