2013-07-08 4 views
0

노드 FFI 모듈을 사용 중이고 Windows에서 동기화 작업을 실행하려고합니다. 다음 코드를 사용하여 작업을 성공적으로 실행할 수 있습니다.Windows에서 node.js를 사용하여 동기 작업 실행

var ffi=require('ffi') 
var nativeC = new ffi.Library("Kernel32", { 
"WinExec": ["int32", ["string"]] 
}); 

nativeC.WinExec('ls -lrt'); 

이것은 동기화 작업을 실행하는 방법이라고 생각하지만이 코드는 첫 번째 'ls -lrt'명령 이후에 항상 종료됩니다. 몇 가지 명령을 연결하면 작동하지 않습니다. 그래서 여기에 FFI 모듈에 콜백 함수가 있습니까? 아니면 Windows에서 node.js의 명령을 연결할 수있는 다른 방법으로, 하나씩 차례대로 실행됩니다.

+0

['ls'] (http://linux.die.net/man/1/ls)는 일반적으로 Windows [PowerShell 외부] (http://technet.microsoft.com/en-us/library/hh849800.aspx)에서 사용할 수 없으며'-lrt' 옵션을 인식하지 못합니다. 이 명령은'cmd.exe'에서 작동합니까? 여러 사용자의 경우? –

+0

그래서 저는 힘내 배쉬를 사용하고 있습니다. 그래서 ls를 사용할 수 있습니다. 게시하는 것을 생각했기 때문에 미안합니다. – anonymous123

+0

'nativeC.WinExec ('bash -c "ls -lrt"');'시도해보십시오. 스크립트를 실행하기 위해 bash를 사용하더라도 ['WinExec()'는 그것을 사용하지 않는 것처럼 보입니다.] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687393) .aspx) (두 번째 인수 참고). –

답변

1

Windows 명령을 실행하기 위해 WinExec이 필요한지 잘 모르겠습니다. 조나단이 지적했듯이, 나는 사용할 수 없습니다. 당신이 체인 명령을 원하는 경우

그러나이 같은 async.js 및 간부을 사용할 수

var 
    async = require('async'); 
    exec = require('child_process').exec, 
    commands = [ 'dir /w', 'echo test']; 

var executeCommand = function(command, callback){ 
    exec(command, function (err, stdout, stderr) { 
    if(err) return callback(err); 
    console.log(stdout); 
    callback(); 
    }); 
}; 

async.eachSeries(commands, executeCommand, function(err){ 
    console.log('error: ' + err); 
}); 
+0

고마워,이게 내가 찾고 있던거야. – anonymous123