Excel僵尸进程debugging停止从Visual Studio

在应用程序debugging过程中(Visual Studio 2012,C#,Excel COM Interop),我通常停止从Visual Studio的应用程序(例外,或逻辑被打破)。 这离开了从应用程序Excel实例挂起的内存。 是的,我可以从任务pipe理器中杀死它,但这很烦人。 有什么办法来“定制”Excel和我的应用程序进程之间的依赖关系?

我在我的configuration文件(C:\ Users \ {userName} \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1)中定义了Powershell函数。

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提示符下inputKill-Excel ,就可以杀死所有隐藏在计算机上的Excel实例。

请注意,这将取消您打开的任何Excel实例, 而不提示保存

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

我不确定有一个简单的方法可以在应用程序closures时closures而不会手动清除它,如果不小心,可能会取消多个实例。 我实际上build议不要停止在中间的应用程序,并有一个优雅地试图closures的Excel实例,以便您可以确保它的工作方式,否则有很高的机会,你可能会看到这种行为在野外。

这个post可能是有用的: 当父进程被终止时,杀死subprocess