NW JS Node JS在Windows XP上执行命令

时间:2015-07-22 18:43:02

标签: node.js cmd windows-xp node-webkit

我正在使用NWJS开发桌面应用程序,而我正在尝试执行命令来获取文件的属性,但它不适用于任何装有Windows XP的计算机,这里是代码:

在Windows 7和8上它运行得很好,我得到了属性,但在Win XP上没有做任何事情......没有错误,没有警报,任何事情,它根本什么都不做。 但是如果在cmd终端中复制/粘贴代码就可以了。

home.executeWinCmd = function () {

    console.log('executing command');

    var terminal = require('child_process').spawn('cmd');

    terminal.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });

    terminal.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });

    terminal.on('exit', function (code) {
        console.log('child process exited with code ' + code);
    });

    setTimeout(function() {
        console.log('Sending stdin to terminal');

        var command = '';

        if($scope.config != undefined) {
            if($scope.config.clientPath == undefined) {
                command = 'wmic datafile where name="' + $scope.config.clientPath + '" get version\n';
            } else {
                command = 'wmic datafile where name="C:\\\\Clients\\\\StaClient.exe" get version\n';
            }
        } else {
            command = 'wmic datafile where name="C:\\\\Clients\\\\StaClient.exe" get version\n';
        }

        console.log('command ' + command);
        terminal.stdin.write(command);

        terminal.stdin.end();
    }, 1000);

}

编辑1 现在这个......出于某种原因。

现在这段代码不起作用,基本上是相同的,当我使用exec时,它什么都不做,没有错误没有stderr,没有stdout,没有。这真是令人不安

NodeModules.exec('wmic datafile where name="' + $scope.config.clientPath + '" get version', function (err, stdout, stderr) {
    if (err) {
        console.log(err);
        Logger.log('ERRR', 'Error executing command: ' + err);
        return;
    }

    if (stderr.length > 0) {
        console.log(stderr);
        Logger.log('ERRR', 'No Client Present return from stderr: ' + stderr);
        $scope.timeout = $timeout($scope.timeoutFn, 3000);
        return;
    }

    $scope.config.currentVersion = (stdout.substring('Version '.length, stdout.length)).trim();
    $scope.config.phase = Enums.Phase.CHECK_RECENT;
    Logger.log('REPR', 'Current Version ' + $scope.config.currentVersion);

});

0 个答案:

没有答案