在服务器上杀死Excel.EXE
可能重复:
如何在C#中正确清理Excel互操作对象
假设ASP.NET Web应用程序在服务器上生成自动Excel报表。 一旦处理结束,我们如何杀死服务器端Excel.EXE。 我故意提出这个问题,因为我相信即使在Excel文件关闭后,垃圾收集器也不会清理Excel可执行文件。
任何指针都会有帮助?
对不起,说这个,我不想变聪明,但是...... 不要把办公室放在服务器上!
那就是,如果我理解正确! :)
编辑:即使我已被标记为此,我永远不会主张在服务器上运行Office - 它已经证明过去在我的屁股疼痛太多了。
话虽如此,现在对我和Crystal Reports来说也是如此;-)
我同意不在服务器上运行Office。 不是我在这件事上有任何选择:)
taskkill选项需要注意的一点是,除非您专门为此计划(也称为单例),否则您可能会运行多个Excel副本(或任何其他Office应用程序),并无意中关闭了错误的实例。
另请注意,每个http://support.microsoft.com/kb/257757
Microsoft目前不推荐并不支持来自任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)的Microsoft Office应用程序的自动化,因为Office可能表现出不稳定的行为和/或者Office在此环境中运行时出现死锁。
作为替代方案,还有一种名为Aspose Cells的产品,它提供的产品旨在允许您以编程方式在服务器环境中使用Excel工作表。 作为一个免责声明,我从未亲自使用过这款产品,但我从过去曾与之合作过的几个人那里听说过它。
我有更多时间思考这个问题,现在推荐使用Open XML Office电子表格格式的XML方法。
下面介绍一些建立具有代码的办公文档的良好链接。 http://msdn.microsoft.com/en-us/magazine/cc163478.aspx http://msdn.microsoft.com/en-us/library/bb735940(office.12).aspx
只需在SQL Server上使用SSIS。 它提供了导出到Excel的功能。 不要在服务器上运行办公室。 浪费钱在aspose或spreadsheetgear上。
气相色谱工作,你只是没有正确使用它遵循这种模式...
private void killExcel()
{
xlApp.Quit();
Marshal.ReleaseCOMObject(xlApp);
if(xlApp != null)
{
xlApp = null;
}
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
让您的Excel操作类实现IDisposable,然后在Dispose方法中粘贴killExcel()。
更新:另外请注意,有时开发者仍然会看到Excel.exe在任务管理器中运行。 在假定上述代码不起作用之前,请检查运行代码的进程是否也关闭。 在VSTO或COM插件的情况下,检查Word / powerpoint /其他excel实例是否也关闭,因为仍有GC根目录返回到启动进程。 一旦关闭,Excel.exe进程将关闭。
链接地址: http://www.djcxy.com/p/35641.html