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

本文关键字:Visual Studio 僵尸 进程 调试 Excel | 更新日期: 2023-09-27 18:05:58

在应用程序调试期间(Visual Studio 2012, c#, Excel COM Interop),我通常从Visual Studio停止应用程序(例外,或逻辑被打破)。这使得从应用程序Excel实例开始挂在内存中。是的,我可以在任务管理器中删除它,但是它很烦人。是否有任何方法来"自定义"依赖于Excel和我的应用程序过程?

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

我有一个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实例,而不提示保存。

使用Excel COM互操作是相当棘手的。首先,你需要让Excel关闭自己,但在此之前,你需要确保你已经正确地清理了所有的COM对象。

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

这个帖子可能有用:在父进程被杀死时杀死子进程