web-dev-qa-db-ja.com

WMICの「削除」と「呼び出し終了」の違い

実行可能パスを使用してWindowsで実行中のプロセスを強制終了するには、次のいずれかを使用できます。

wmic process where ExecutablePath='C:\\path\\to\\my.exe' delete

または:

wmic process where ExecutablePath='C:\\path\\to\\my.exe' call terminate

もしあれば、これら2つのアプローチの実際的な違いは何ですか?

1
Jake Cobb

call terminateを使用すると、call terminate '-1073741510'などの終了ステータスを渡すことができます。 32ビットのステータス値は署名する必要があり、負の値は引用符で囲む必要があります。後者の値は、符号付き10進値としてSTATUS_CONTROL_C_EXIT(0xC000013A)です。デフォルトの終了ステータスは0です。これは、delete動詞に使用される値と同じです。

実装に関しては、WMIサービスはWMIプロバイダーホスト(wmiprvse.exe)のインスタンスを開始して、要求を処理します。プロバイダーのホストプロセスが数分間再利用されるため、デバッガーを接続してこれを検査するのは比較的簡単です。 Win32_Process クラスは、WMI Win32プロバイダーモジュール(cimwin32.dll)に実装されています。このモジュールには、ProcessメソッドとDeleteInstanceメソッドを持つExecTerminateクラスが含まれ、それぞれdeletecall terminateに対して呼び出されます。どちらのメソッドも、最終的にWINAPITerminateProcessを呼び出します。

1
Eryk Sun