在节点webkit中保存后,使用exec抛出进程错误

时间:2015-04-22 03:12:20

标签: node.js filesystems exec node-webkit

我在节点webkit中使用exec()在保存文件后使用start filename在操作系统的默认程序中打开文件。这是我的代码:

            var fs = require('fs');
            var myFile = "C:/TEMP/" + fileName;
            fs.writeFile(myFile, rtf, function(err) {
                if(err) {
                    alert("error");
                }
            });
            var sys = require('sys');
            var exec = require('child_process').exec;
            var child;

            child = exec("start " + myFile, function (error, stdout, stderr) {
              if (error !== null) {
                console.log('exec error: ' + error);
              }
            });

有时会有效,但有时我会收到此错误:exec error: Error: Command failed: The process cannot access the file because it is being used by another process.

编辑:我看到微软有这个问题,rtf和txt文件在wordpad中打开(这是我的打开),所以我认为可能是这个过程挂起而不是正常死亡。在我打电话给它之前退出之前,我将默认程序更改为在Libre Office中打开并且有更好的结果(它没有经常发生),但是如果我尝试按顺序快速启动该功能,我仍然会得到错误。

1 个答案:

答案 0 :(得分:0)

writeFile是异步的。你需要这样的回调:

var fs = require('fs');
var myFile = "C:/TEMP/" + fileName;
fs.writeFile(myFile, rtf, function(err) {
   if(err) {
      alert("error");
   }else{
      lire();
   });

var sys = require('sys');
var exec = require('child_process').exec;
var child;
function lire(){
   child = exec("start " + myFile, function (error, stdout, stderr) {
   if (error !== null) {
      console.log('exec error: ' + error);
   }
   });
};