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立起来的,所以我没有一个合理的理由,除了它是有效的。 但是,这不是一直工作。 它可能只适用于你的情况