Node.js的本机模块是不是有效的Win32应用程序错误(Node.js native modul

2019-08-01 19:13发布

试图让于Node.js的Hello World本机模块

有一个Win32项目在VS 2012的一个文件:

#include <node.h>
#include <v8.h>

using namespace v8;

Handle<Value> Method(const Arguments& args) {
  HandleScope scope;
  return scope.Close(String::New("world"));
}

void init(Handle<Object> target) {
  target->Set(String::NewSymbol("hello"),
      FunctionTemplate::New(Method)->GetFunction());
}
NODE_MODULE(hello, init)

That`s编译为hello.node。
选项:
- 动态库文件(.dll)
- 没有共同语言运行库支持

使用它,如:

hello = require './hello'
console.log hello.hello()

它的工作原理本地机器上(win8的64位,节点:0.8.12)
但在远程服务器(Windows Server 2008 x64的节点:0.8.12,iisnode:0.1.21版x64,IIS7)它抛出这个错误:

应用程序已抛出未捕获的异常而终止:错误:
%1不是有效的Win32应用程序。

C:\的Inetpub \测试\ LIB \服务器\ hello.node
在Object.Module._extensions..node(module.js:485:11)
在Module.load(module.js:356:32)
在Function.Module._load(module.js:312:12)
在Module.require(module.js:362:17)
在要求(module.js:378:17)
在对象。 (C:\的Inetpub \测试\ lib中\服务器\ index.js:32:9)
在Module._compile(module.js:449:26)
在Object.Module._extensions..js(module.js:467:10)
在Module.load(module.js:356:32)
在Function.Module._load(module.js:312:12)

什么我tryed:
与应用程序池的设置(启用的Win32应用程序)打不帮助。
Iisnode 86并不在x64操作系统上安装。
`吨编译成因为错误的64:错误2错误LNK1112:模块机器类型“X86”与目标机器类型冲突“64” C:\德比\你好\构建\ node.lib(node.exe)喂

有没有人有什么建议?

Answer 1:

我不知道是否为时已晚,但我发现了一些试验和错误,主要的问题(在我的机器)之后的答案是我编在Windows上的NodeJS能够创建使用Visual C ++的扩展,我已经有了安装从页面的NodeJS,如果我尝试使用默认安装(这是由安装的NodeJS添加到我的路径)来运行测试,然后失败了,但如果我使用编译node.exe(一个我编为能够引用库在Visual C ++),那么它的工作原理。

总之,这个问题是不是与延伸,它是用汇编的NodeJS,使用您(为了打造VS解决方案,我认为你这样做)编制的节点,那么它应该在远程机器上运行。

注意:这个问题依赖于你在64位使用node.exe编译后运行一个32位的DLL,这就是为什么它的抱怨,如果你在32位它应该工作使用node.exe。 (至少解决我的问题)



Answer 2:

无关,你probem:我得到了同样的错误( Error: %1 is not a valid Win32 application )试图与扩展“.node”,如执行脚本时node.exe example.node 。 其他扩展(.js文件,txt文件,没有扩展名的全部)做工精细。



Answer 3:

只是有同样的问题,即使我的节点的架构和插件是相同的,我得到了类似的错误消息。 事实证明,你不能重命名节点可执行文件。 它必须是node.exe ,我试图在同一时间,以测试多个版本,所以我不得不把他们在自己的文件夹。 之后,这一切都工作得很好。



文章来源: Node.js native module is not a valid Win32 application error