node.js子进程在node webkit中不起作用

node.js子进程在node webkit中不起作用,node.js,node-webkit,pdftk,Node.js,Node Webkit,Pdftk,我用node webkit制作了一个小应用程序。预包装,工作正常。但在我压缩它并将其添加到node-webkit.app中的内容/资源后,我在运行应用程序时出错。它可以很好地打开,但它所执行的任务涉及子进程,我得到以下错误: Uncaught node.js错误 错误:spawn enoint 我猜这可能与这个问题中提出的问题有关: 因为我的子进程正在调用一个单独的命令行程序pdftk。最后,我想把pdftk作为我的应用程序的一部分来安装——我还不知道怎么做。我尝试将其作为应用程序其余部分的压缩

我用node webkit制作了一个小应用程序。预包装,工作正常。但在我压缩它并将其添加到node-webkit.app中的内容/资源后,我在运行应用程序时出错。它可以很好地打开,但它所执行的任务涉及子进程,我得到以下错误:

Uncaught node.js错误 错误:spawn enoint

我猜这可能与这个问题中提出的问题有关:

因为我的子进程正在调用一个单独的命令行程序pdftk。最后,我想把pdftk作为我的应用程序的一部分来安装——我还不知道怎么做。我尝试将其作为应用程序其余部分的压缩内容之一,但这导致应用程序在启动后立即崩溃。它将打开一个标题正确但没有内容的窗口,并立即关闭


所以,主要问题是,如何将pdftk作为打包的node webkit应用程序的一部分安装,以便只需双击图标而不是使用命令行即可启动该应用程序?谢谢您的帮助。

我假设您的代码是通过node webkit的node main入口点执行的:

如果有任何异常发生,应用程序中未捕获的异常将崩溃

遗憾的是,目前用于获取崩溃转储的breakpad功能在OSX上不起作用:

如何防止节点Webkit立即崩溃 将代码包装在try/catch中以防止崩溃,并获取崩溃发生的原因信息

try {

    the_child_process = child_process.spawn(pathToBin, args);

} catch (err) {

    global.console.log( "Error while trying to start child process: " + JSON.stringify(err) );
}
这是针对您所经历的情况的一般性建议,以找出问题的真正原因

如何在节点webkit应用程序中包含二进制文件 其中涉及到一些事情

包括app.nw中的二进制文件 这应该是不言自明的——但有一个警告给我带来了一些麻烦: 确保二进制文件通过chmod 755标记为可执行文件。如果您正在使用grunt,您可能会喜欢grunt chmod。 现在,您的二进制文件是应用程序包的一部分,您可以通过了解绝对路径来执行它们。 在运行时解析二进制文件的路径,即使在打包时也是如此。下面的代码是我为当前平台选择正确二进制文件的解决方案,假设您的工具是多平台的。此外,它还假定二进制文件按特定的文件夹结构排序。或者,在构建过程中选择正确的二进制文件,并始终使用相同的路径

最终解析作为参数提供给二进制文件的路径。这也有点混乱,因为所有路径都被视为相对于应用程序的包根路径。我的节点主文件位于我的应用程序包中的一个文件夹中,因此我认为应该从那里引用相关文件,但事实并非如此

app package root
|--- package.json     <- node-webkit package.json
|
|--- client           <- here my sources for the frontend reside
|
|--- server           
|----|--- node_modules  <- server runtime dependencies
|----|--- src           <- server source code
|----|----|--- server.js  <- this is my node server file to execute via node
|
|--- node-webkit      <- node webkit code and dependencies
|----|--- bin           <- a directory with my deployed binaries
|----|--- node-main.js  <- this is my node main file
这是我的经验:

var child_process = nw.require('child_process');

也许显示执行命令的代码片段会有所帮助。为了回答最后一个问题,如果pdftk可以作为独立程序运行,那么您只需要将整个应用程序保留在包中,然后执行其相对路径;在'exit'上,函数代码{…};将整个应用程序放在软件包中会导致应用程序甚至无法启动—它会立即崩溃。我假设我在打包步骤中一定是做错了什么,但我不知道是什么。那么,试着在命令行上执行打包版本的pdftk。这应该足以知道问题是在Node.js应用程序中还是在其他软件中。还有,你在哪个平台?我在OSX。我无法从命令行执行pdftk的打包版本-使用其在包中位置的整个路径,我得到一个错误,它不是目录。但是,尝试对不在压缩和打包文件中的pdftk副本执行完全相同的操作也可以。请从命令行显示您正在使用的命令以尝试启动它。听起来像是路径问题。谢谢-这太棒了!我现在没有时间去调查它是否能解决我的问题,但我希望很快就能做到。非常感谢。我不熟悉js、node和node webkit。如何访问全局控制台日志?我在命令提示符下运行nw.exe,但从未看到异常消息。我知道我收到了一个错误,因为我可以使用alert查看它。如果我不想在我的应用程序中附带二进制文件,该怎么办。我只是想看看用户是否安装了二进制文件。当我从命令行运行它时,它可以工作,因为我在用户环境下运行它,但当我作为Mac OS X应用程序运行它时,它就不工作了。有什么想法吗?
    child_process.spawn(absPathToNodeBin, "server/src/server.js");
var child_process = nw.require('child_process');
//exec
var exec = child_process.exec;
var ret = exec('cat *');
//spawn
var sp = child_process.spawn;
var sr = sp('cat *');