Node.js本地模块不是有效的Win32应用程序错误

试图为node.js制作Hello World本地模块

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

#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) 

这个编译成hello.node。
选项:
– dynamic库(.dll)
– 没有公共语言运行时支持

像这样使用它:

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

它在本地机器上运行(win8 x64,节点:0.8.12)
但是,在远程服务器(Windows Server 2008 x64,节点:0.8.12,iisnode:0.1.21 x64,iis7),它会引发此错误:

应用程序已经抛出一个未捕获的exception,并终止:错误:
%1不是有效的Win32应用程序。

C:\的Inetpub \testing\ 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)
在require(module.js:378:17)
在对象。 (C:\的Inetpub \testing\ 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)

我试了一下:
使用应用程序池设置(启用win32应用程序)没有帮助。
Iisnode x86不在x64操作系统上安装。
错误2错误LNK1112:模块机器types'X86'与目标机器types'x64'冲突C:\ derby \ hello \ build \ node.lib(node.exe)hello

有没有人有什么build议?

我不知道是不是太迟了,但是我经过一些试验和错误后发现了答案,主要是(在我的机器上)问题是我在windows上编译nodejs,以便能够使用visual c ++创build扩展,而且我已经如果我尝试运行testing使用默认安装(这是由nodejs安装程序添加到我的PATH)然后它失败,但如果我使用编译的node.exe(我编译的是能够在Visual C ++中引用库),那么它的工作原理。

总之,问题不在于扩展,而是在于nodejs编译,使用您编译的节点(为了构buildVS解决scheme,我假设您这样做了),然后它应该在远程计算机上工作。

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

与您的probem无关:尝试执行扩展名为“.node”的脚本(例如node.exe example.node )时,出现同样的错误( Error: %1 is not a valid Win32 application )。 其他扩展名(.js,.txt,根本没有扩展名)工作正常。

刚刚有同样的问题,即使我的节点和插件的架构是相同的,我有类似的错误消息。 事实certificate,您不能重命名节点可执行文件。 它必须是node.exe ,我试图同时testing多个版本,所以我不得不把它们放在自己的文件夹中。 之后,它一切正常。