我有一个简单的Web应用程序,它使用Excel Interop库来读取和插入Excel电子表格。我正在尽职尽责地确保don't use two dots并确保使用Marshal.ReleaseComObject()
和GC.Collect()
释放所有COM对象引用,但仍有一个EXCEL.EXE进程在运行在我的服务器上。
我创建了一个Windows窗体应用程序,它使用与我的ASP.NET应用程序相同的对象释放过程,并且它成功结束了该过程。使用我忽略的Interop库与ASP.NET有什么关系吗?
编辑:在黑暗中拍摄,可能需要在服务器上以特定方式设置权限?我在我的web.config文件中使用<identity impersonate="true"/>
,并且是服务器上的本地管理员。
答案 0 :(得分:4)
我不确定这是一个答案,但我在ASP.NET和Excel Interop上做了很多工作,可以为您提供一些观察/指示。
如果您使用任务管理器,您可以看到哪个用户仍在运行EXCEL.EXE进程 - 它很可能是AppPool标识。
根据应用程序池回收的经验,这将关闭Excel。
另外,您可能会注意到,如果再次运行脚本,则会打开第二个Excel并关闭!
供参考,这是我的关闭Excel代码:
xl.Quit();
Marshal.ReleaseComObject(xl);
xl = null;
GC.Collect();