2

私は、Windowsオペレーティングシステムで実行することを目的としたC++QTデスクトップアプリケーションを作成しています。
このアプリケーションは、実行中のすべてのプロセスを列挙する必要があり、特定のプロセス(名前で認識される)を強制終了します。私がそれを行うために知っている2つの方法があります:

  1. WindowsAPIを使用します。
  2. tasklistコマンドを使用してプロセスを取得し、プロセスtaskkillを終了します。

コードスタイル、効率、パフォーマンスの点で優れているオプションはどれですか?または、3番目のオプションはありますか?

4

3 に答える 3

6

効率とパフォーマンスについて心配する必要はありません。おそらく 1 秒あたり 1000 プロセスを強制終了することはないでしょう。

したがって、他のいずれかを選択する理由は、主にプログラミングと保守の容易さです。プロセスを列挙するための API は最も簡単ではありませんが、ウェブ上で多くの例を見つけることができます (ここなど)。tasklist を使用するには、出力を取得して解析する必要があります。

次の理由から、API を使用します。

  1. 操作が失敗した場合に備えて、より多くの情報を取得できます。問題がどこにあり、何が問題だったのかを正確に知ることができます。
  2. 確かtasklistではありませんtaskkillが、すべての Windows マシンに搭載されていることが保証されています。それらは OS に付属していますが、誰かが攻撃面などを拡大し、それらを削除すると考えるかもしれません。
  3. テキストの解析はエラーが発生しやすいものです。たとえば、tasklistの出力が OS ロケールに依存するかどうかはわかりません。あなたは?
于 2012-07-05T07:45:36.673 に答える
0

実際、私はWMIを使用しており、WMIでプロセスを強制終了できることを読みました

Win32_Process クラスの Terminate メソッド

(情報だけです:))

他のアプリケーションで winAPI を使用しています

于 2012-07-05T07:44:11.823 に答える
0

もちろん、Windows Api を使用します。外部exeを使用してプロセスを強制終了するよりもはるかに優れています。プロセス ID を必要とするOpenProcessを使用してプロセス ハンドルを取得できます。開いたら、 TerminateProcessを使用してプロセス ハンドルを指定できます。

于 2012-07-05T07:44:23.087 に答える