从Visual Studio调试停止的Excel僵尸进程

时间:2014-05-30 08:58:37

标签: c# excel visual-studio-2012

在应用程序调试期间(Visual Studio 2012,C#,Excel COM Interop)我通常会从Visual Studio停止应用程序(异常,或者逻辑被破坏)。这从应用程序Excel实例开始挂起在内存中。是的,我可以从任务管理器中删除它,但它非常烦人。有没有办法在Excel和我的应用程序进程之间“自定义”依赖关系?

2 个答案:

答案 0 :(得分:1)

我的个人资料中定义了一个Powershell函数(C:\ Users \ {userName} \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1)

function Kill-Excel {
    $excelInstances = @(Get-Process | Where { $_.Name -Eq "Excel" }).Count
    if ($excelInstances -Eq 0) {
        "Excel not running"
    }
    else {
        if ($excelInstances -Eq 1) {
            "Killing 1 instance of Excel"
        }
        else {
            "Killing $excelInstances instances of Excel"
        }
        Get-Process | Where { $_.Name -Eq "Excel" } | Kill
    }
}

然后我只需在Powershell提示符下键入Kill-Excel,该提示会在我的计算机上杀死所有隐藏和可见的所有 Excel实例。

请注意,这将删除您已打开的所有Excel实例,而不提示保存

答案 1 :(得分:0)

使用Excel COM互操作非常棘手。首先,您需要让Excel关闭自己,但在此之前,您需要确保已正确清理所有COM对象。

我不确定是否有一种简单的方法可以在您关闭应用程序时关闭它而不会手动查杀它,如果您不小心可能会导致多个实例关闭。我实际上建议不要在中间停止应用程序,并且有办法优雅地尝试关闭excel实例,这样你就可以确保它正常工作,否则很有可能你会看到这个一旦你部署了野外行为。

这篇文章可能有用:Kill child process when parent process is killed