COM自动化后如何强制Excel进程退出?

时间:2012-01-25 13:36:12

标签: php excel com

在PHP中,我使用COM-object创建一个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分钟。如何强制这个过程立即退出?

3 个答案:

答案 0 :(得分:3)

您正在使用COM对象,因此您必须在Windows上讨论php。基本上,您可以使用命令行工具taskkill来终止任务。你可以使用php命令shell_exec调用它,比如

shell_exec('taskkill /F /IM "excel.exe"');

如果您没有权利(但我认为您应该开始此过程),请使用runas运行cmd行。

BUT!您正在使用php,因此如果您在Web环境中运行此操作并且人们同时访问您的网站,则可能有多个Excel实例正在运行。如果是这种情况,你必须弄清楚你要杀死哪一个。

答案 1 :(得分:0)

如果请求另一个“Excel.Application”对象,该过程会持续一段时间,在这种情况下,我们可以避免启动新进程和加载所有DLL的成本。

我只是将其视为一项功能。

答案 2 :(得分:0)

还有另一种方式...... 尝试取消初始化COMS。而不是只做一次,做4次。这是通过反复试验确定的,所以我没有正当理由,除非它有效。但是,这并不是一直有效。它可能只适用于您的情况