Hi, Thank you for your software WPKG ! I have modified wpkg.js to handle stdout and stderr of exec command. This patch solves the problem mentioned at : http://wpkg.org/index.php/Packages.xml "When the ouput of a command (think of: copy,cacls) is too much, the command will fail. You have to redirect the output to NUL or a file (example: "%command% >nul")." Moreover, when wpkg.js runs with /debug or /verbose option, messages from the exec command, if any, are displayed. Here is the modified 'function exec(cmd, timeout)' and two new functions : function readStd(se) function displayStd(sStdOut, sStdErr) Feel free to include this patch within your next release. Regards, Jean ----------------- part of wpkg.js ----------------- /** * Executes a shell command and blocks until it is completed, returns the * program's exit code. Command times out and is terminated after the * specified number of seconds. */ function exec(cmd, timeout) { if (dryrun) { return 0; } try { var shell = new ActiveXObject("WScript.Shell"); // timeout after an hour by default if (timeout == 0) { timeout = 3600; } var shellExec = shell.exec(cmd); // var count = 0; // while (shellExec.status == 0) { // WScript.sleep(1000); // count++; // // if (count >= timeout) { // // return -1; // } // } // WScript.sleep(1000); var now = new Date(); var watchdog = now.getTime() + timeout*1000; var count = 0; var end = false; while ( ( ! end ) && (now < watchdog) ) { if ( ! readStd(shellExec) ) { WScript.sleep(300); if (shellExec.status != 0) { if (count < 10) { // Nothing to read, 3 seconds after execution ended end = true; } count++; } } else { WScript.sleep(50); count = 0; } now = new Date(); } return shellExec.exitCode; } catch (e) { throw new Error(0, "Command \"" + cmd + "\" was not successful.\n" + e.description); } } function readStd(se) { // Get StdOut and StdErr from exec(cmd) var sStdOut = ""; var sStdErr = ""; var somethingRead = false; if ( ! se.StdOut.AtEndOfStream ) { sStdOut += se.StdOut.ReadAll(); somethingRead = true; } if ( ! se.StdErr.AtEndOfStream ) { sStdErr += se.StdErr.ReadAll(); somethingRead = true; } if (somethingRead && debug) { displayStd(sStdOut, sStdErr) } return somethingRead; } function displayStd(sStdOut, sStdErr) { // Display StdOut and StdErr if /debug option if ( sStdOut.length > 0 ) { alert(sStdOut); } if ( sStdErr.length > 0 ) { alert(sStdErr); } } ---------------------------------------------- wpkg-users mailing list wpkg-users at lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/wpkg-users |