0

関数を動作させることができません。Iexplore.exe が実行されているかどうかを確認し、実行されている場合は待機します。そうでない場合は、スクリプトを実行します。

待機機能を追加する方法がわかりません。

function main() {
var ieinfostate = false;
var iewait = setInterval(function () {
if (ProcessesRunning("iexplore.exe") != 1) {
    clearInterval(iewait);
    dosomethingelse();
} else if (ieinfostate == false) {
4

2 に答える 2

2

ブラウザのJavascriptには待機機能がなく、作る方法がありません。

特定のケースでは、setInterval()呼び出しを使用して 500 ミリ秒ごとに定期的に状態をチェックし、目的の状態を見つけたら、インターバル タイマーを停止して何らかのアクションを実行できます。

var timer = setInterval(function() {
    if (ProcessesRunning ("iexplore.exe") == 1) {
        server.logMessage( "Please close Internet explore first" );
    } else {
        clearInterval(timer);
        var shell = new ActiveXObject( "WScript.Shell" );
        server.logMessage( "Unpacking file" );
        // ...
    }
}, 500);
于 2012-11-22T08:14:44.690 に答える
0

jscriptを使用しているので、sleep()メソッドがあります。javascriptは非同期になるように設計されているので、これは使用できる最悪の事態だと思いました。

あなたはこのようにそれを行うことができます:

var ieinfostate = false;

var iewait = setInterval(function () {
    if (ProcessesRunning("iexplore.exe") != 1) {
        clearInterval(iewait);
        dosomethingelse();
    } else if (ieinfostate == false) {
        ieinfostate = true;
        server.logMessage("Please close Internet Explorer first. This installer will wait till its closed.");
    }
}, 500);

var dosomethingelse = function () {
    var shell = new ActiveXObject("WScript.Shell");
    server.logMessage("Unpacking file");
    /* your unpack stuff here */
};

悲しいことに、タイマーはWindowsでプロセスの終了を待つ唯一の方法です。

マイクロソフトは、プロセス状態変更イベントなどの有用なAPIをjscriptに実装することに失敗しました。

クリーンにしたい場合は、c、c ++、またはc#の使用を検討する必要があります

于 2012-11-22T08:18:36.223 に答える