path.resolve(__ dirname,' tools / unzip.exe')在Windows 10上没有任何消息而崩溃

时间:2016-12-15 16:54:52

标签: node.js node-webkit

我正在使用nwjs编写应用程序,并使用nwjs-updater作为更新系统。

不幸的是,在尝试使用C. Spieler(文档:https://www.mkssoftware.com/docs/man1/unzip.1.asp)在Windows 10上解压缩时,我遇到了这个问题。

当我尝试调用__dirname var时,应用程序崩溃了。 这是失败的代码:

// Code imported from https://github.com/Aufree/nwjs-updater/blob/master/basic/updater.js
// Only added console logs for debugging the issue.

var path = require('path');

//(...)
//line 253:
win: function(filename, cb, manifest, temporaryDirectory){
  var destinationDirectory = getZipDestinationDirectory(filename, temporaryDirectory),
      unzip = function(){
        exec( '"' + path.resolve(__dirname, 'tools/unzip.exe') + '" -u -o "' +
            filename + '" -d "' + destinationDirectory + '" > NUL', function(err){
          if(err){
            return cb(err);
          }

          cb(null, path.join(destinationDirectory, getExecPathRelativeToPackage(manifest)));
        });
      };

  console.log(destinationDirectory);                            // Works fine   
  console.log(__dirname);                                       // Never gets to print
  console.log(path.resolve(__dirname, 'tools/unzip.exe'));      // Never gets to this line
  fs.exists(destinationDirectory, function(exists){
    if(exists) {
      del(destinationDirectory, {force: true}, function (err) {
        if (err) {
          cb(err);
        }
        else {
          unzip();
        }
      });
    }
    else {
      unzip();
    }
  });

}
//(...)

这是我如何启动"更新程序"变量:

var pkg = require(link_to_package.json);
var upd = new updater(pkg);

关于问题可能出在哪里?

感谢。

1 个答案:

答案 0 :(得分:1)

this problem report,似乎__dirname在node-webkit中不起作用,因为它没有正确定义所有模块级变量。

建议的解决方法是使用process.cwd()