Com 是否有任何方法可以终止Powershell中的挂起进程?

Com 是否有任何方法可以终止Powershell中的挂起进程?,com,powershell,Com,Powershell,我正在使用Powershell测试COM对象方法调用。由于设计/编码/一切都很糟糕,这个COM对象方法在出错时会挂起。我默认的本能是控制+c,但这不起作用。我必须杀死Powershell才能杀死挂起的COM方法调用吗 提前感谢。您是否正在调用位于PowerShell进程地址空间中的COM对象上的方法?如果是,则必须杀死PowerShell才能取消挂起呼叫 编辑Matthew询问是否可以使用AppDomains解决此问题 不幸的是,它不能。这里的关键是COM对象正在执行本机代码。这意味着在COM对

我正在使用Powershell测试COM对象方法调用。由于设计/编码/一切都很糟糕,这个COM对象方法在出错时会挂起。我默认的本能是控制+c,但这不起作用。我必须杀死Powershell才能杀死挂起的COM方法调用吗


提前感谢。

您是否正在调用位于PowerShell进程地址空间中的COM对象上的方法?如果是,则必须杀死PowerShell才能取消挂起呼叫

编辑Matthew询问是否可以使用AppDomains解决此问题


不幸的是,它不能。这里的关键是COM对象正在执行本机代码。这意味着在COM对象挂起时,线程处于本机代码中。从托管代码到在本机代码中解开线程,您无能为力。在线程返回托管代码之前,甚至对.Abort()的调用也不会生效

对我来说最简单的方法就是使用

您可以尝试:

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($obj)

或者通过管道将过程停止,增加作用力也会有所帮助。

不太清楚您的意思,但我认为答案是肯定的。我在PS中用“new object-Com”实例化了这个对象。这个过程是这样的,还是他可以使用AppDomain进行隔离?@Matthew是的,我在我的answer@PITADev那么它很可能位于PS的地址空间中process@JaredPar谢谢这有点糟糕,但这当然不是Powershell的错。这在这种情况下不起作用。挂起的进程是PowerShell,因为它正在调用一个hungYeah的inproc COM对象-我在发布后看到了您的答案和OP的评论。