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 中进程关闭的唯一方法。

微软在 jscript 中难以实现有用的 api,如进程状态更改事件等。

如果你想让它干净,你应该考虑使用 c、c++ 或 c#

于 2012-11-22T08:18:36.223 回答