【问题标题】:How to force Excel process to quit after COM automation?COM自动化后如何强制退出Excel进程?
【发布时间】:2012-02-18 16:32:33
【问题描述】:

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

【问题讨论】:

    标签: php excel com


    【解决方案1】:

    您正在使用 COM 对象,所以您一定是在谈论 Windows 上的 php。基本上,您可以使用命令行工具taskkill 终止任务。你可以使用 php 命令 shell_exec 来调用它,比如

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

    如果您没有权限(但我相信您应该,因为您启动了此过程),请使用 runas 运行 cmd 行。

    但是!您正在使用 php,因此如果您在 Web 环境中运行它并且人们同时访问您的网站,您可能有多个 Excel 实例正在运行。如果是这样的话,你必须弄清楚你想杀死哪个。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗯,但在具有相同 Windows 2008 Server R2Excel 2003 进程的其他服务器上会立即终止。
      • 据我所知,Windows 在执行结束后的一段时间内不会卸载可执行文件,但进程在任务管理器中变得不可见。在我的情况下,Excel.exe 进程在任务管理器中保持可见。当我再次运行 PHP 代码时,系统会创建新进程。
      【解决方案3】:

      还有一种方法... 尝试取消初始化 COMS。与其只做一次,不如做4次。这是通过反复试验建立的,所以除了它有效之外,我没有正当理由。但是,这并不总是有效。它可能只适用于您的情况

      【讨论】:

      猜你喜欢
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2010-11-20
      • 1970-01-01
      • 2013-09-01
      • 2010-10-04
      • 2019-01-25
      相关资源
      最近更新 更多