COM自动化后如何强制Excel进程退出?
在PHP中,我使用COM对象创build一个XLS文件。
$excel = new COM("Excel.Application") or die("Excel is not installed!"); $excel->WorkBooks->Add(); ... $excel->WorkBooks[1]->SaveAs($path); $excel->Quit(); $excel->Release(); $excel = null;
这段代码运行后,Excel.exe进程仍在内存中〜6分钟。 如何强制这个过程立即退出?
你正在使用COM对象,所以你必须在Windows上谈论PHP。 基本上,你可以使用命令行工具taskkill来终止任务。 你可以使用php命令shell_exec来调用它
shell_exec('taskkill /F /IM "excel.exe"');
如果你没有权限(但是我相信你应该因为你开始这个过程),使用runas运行cmd行。
但! 您正在使用PHP,所以如果您在networking环境中运行此function,并且人们同时访问您的网站,则可能会运行多个Excel实例。 如果是这样的话,你必须弄清楚你想杀哪一个。
如果需要另一个“Excel.Application”对象,这个过程会持续一段时间,在这种情况下,我们可以避免启动一个新进程和加载所有DLL的代价。
我只是把它看作一个function。
还有另一种方法…尝试不初始化COMS。 而不是只做一次,做4次。 这是通过反复试验build立起来的,所以我没有一个合理的理由,除了它是有效的。 但是,这不是一直工作。 它可能只适用于你的情况
- 与Microsoft.Office.Interopunit testing在生成服务器上失败
- 自动化错误80004005
- PowerShell的:如果Excel已经运行,获取实例,否则启动它 – exception处理
- 设置轴标题时发生COMException 0x800A03EC
- Microsoft.Office.Tools.Excel.ApplicationFactory.GetVstoObject导致VBA内存泄漏?
- 如何运行和控制从Java的Excel实例
- 你能告诉Excel不要重新计算其内容是基于COM组件的单元格吗?
- 从Excel中读取interop并将不同的值写入另一个工作表
- Excel Interop控制面板UI元素不显示