0

Firebreath フレームワークを使用してブラウザ プラグインを開発しようとしています。私が達成したい最初のことは、プラグインが traceroute を実行できるようにすることです。今のところWindows7でやっています。現在、Win32API CreateProcess を使用してコマンド シェルを呼び出すことにしました。dwFlags = STARTF_USESHOWWINDOW を設定することで、実行中にコマンド シェル ウィンドウを非表示にすることができます。

問題 : createProcess は run() というメソッドに実装されており、テストのために JS を使用して呼び出しました。plugin().run() を呼び出したところ、traceroute は正常に機能しており、出力は意図したとおりにテキスト ファイルに正常に書き込まれました。ただし、実行中にブラウザが応答しなくなり、traceroute が完了してからプラグインが最後にクラッシュしました。私はプラグイン開発が初めてで、 c++ に関する知識がほとんどないため、なぜこの問題が発生したのだろうか。参考までに、コマンドシェル ウィンドウを非表示にしなかった場合、プラグインは驚異的に機能しました。traceroute の実行中、ブラウザは応答していました。

4

1 に答える 1

1

NPAPI プラグイン (FireBreath を使用するかどうかに関係なく) では、メイン (JavaScript) スレッドをブロックしないことが非常に重要です。あなたがやろうとしていることは、いくつかの方法で実行できます。おそらく、コールバックを渡し、新しいスレッドを開始し、そこで createprocess を実行し、結果が完了したら js コールバックを起動します。

FireBreath のヒント: 非同期 Javascript 呼び出しを参照してください。

注意すべきことの 1 つは、呼び出し中にプラグインがシャットダウンされた場合に、スレッド (およびプロセス) を終了できる必要があることです。

于 2012-02-09T00:25:21.437 に答える