2009-06-30 20 views
3

私はPowershellを使ってCOMオブジェクトメソッド呼び出しをテストしています。デザイン/コーディング/すべてが貧弱なため、このCOMオブジェクトメソッドはエラーが発生したときにハングします。私のデフォルトの本能は、その中から+ cを制御することですが、これはうまくいきません。私はハングしたCOMメソッド呼び出しを強制終了するためにPowershellを削除する必要がありますか?Powershellでハングしたプロセスを終了する方法はありますか?

ありがとうございます。

答えて

6

PowerShellプロセスのアドレス空間に存在するCOMオブジェクトのメソッドを呼び出していますか?そうであれば、呼び出しを解除するためにPowerShellを強制終了する必要があります。

EDIT MatthewはAppDomainsを使用してこの問題を解決できるかどうか尋ねました。

残念ながら、それはできません。ここで重要な点は、COMオブジェクトがネイティブコードを実行していることです。つまり、COMオブジェクトがハングする時点で、スレッドはネイティブコードになります。ネイティブコードでスレッドを解除するためにマネージコードから行うことは何もありません。 .Abort()の呼び出しも、スレッドがマネージコードに戻るまで有効になりません。

+0

あなたは何を意味するのか正確にはわかりませんが、答えは「はい」だと思います。 PSでオブジェクトを "new-object -Com"でインスタンス化しました。 –

+0

プロセスに当てはまりますか、またはAppDomainを分離のために使用することはできますか? –

+0

@マッチューはい、私は私の答え – JaredPar

1

簡単な方法はpskillです。

+0

この場合は動作しません。掛かっているプロセスはPowerShellです。なぜなら、inproc COMオブジェクトに電話がかけられているからです。 – JaredPar

+0

ええ - 投稿した後、あなたの答えとOPのコメントを見ました。 –

0

あなたは試すことができます:

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

またはパイププロセスを停止し、処理をするために、-Forceは同様に助けることができる加えます。