Node.js собственный модуль не является допустимой ошибкой приложения Win32
Попытка создать встроенный модуль Hello World для node.js
Получил проект 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)
Это компилируется на hello.node.
Опции:
- Динамическая библиотека (.dll)
- Отсутствует поддержка времени выполнения обычного языка.
Используйте его как:
hello = require './hello'
console.log hello.hello()
Он работает на локальной машине (win8 x64, node: 0,8.12)
Но на удаленном сервере (сервер Windows 2008 x64, node: 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\Test\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 os.
Невозможно скомпилировать x64 из-за ошибки: Ошибка 2 ошибки LNK1112: тип модуля модуля "X86" конфликтует с типом целевой машины "x64" C:\derby\hello\build\ node.lib(node.exe) привет
Есть ли у кого-нибудь предложения?
Ответы
Ответ 1
Я не знаю, слишком ли поздно, но я нашел ответ после проб и ошибок, главным образом проблема (на моей машине) заключалась в том, что я скомпилировал nodejs на окнах, чтобы иметь возможность создавать расширение с помощью визуального С++ и Я уже установил nodejs со страницы, если я попытаюсь запустить тест, используя установку по умолчанию (которая была добавлена в мой PATH установщиком nodejs), тогда она терпит неудачу, но если я использую скомпилированный node.exe( один, который я скомпилировал, чтобы иметь возможность ссылаться на libs в Visual С++), тогда он работает.
В общем, проблема заключается не в расширении, а в компиляции nodejs, используя node, который вы скомпилировали (чтобы построить решение VS, я предполагаю, что вы это сделали), а затем он должен работать на удаленном компьютере машина.
Примечание. Проблема связана с тем, что вы используете node.exe, скомпилированный в 64 бит для запуска 32-битной DLL, поэтому жалоба на нее, если вы используете node.exe в 32 битах, она должна работать. (по крайней мере, это решило мою проблему)
Ответ 2
Не связано с вашим вопросом: я получаю ту же ошибку (Error: %1 is not a valid Win32 application
) при попытке выполнить script с расширением ".node", например. node.exe example.node
. Другие расширения (.js,.txt, без расширения вообще) работают нормально.
Ответ 3
У меня была такая же проблема, и хотя архитектуры моего node и аддона были одинаковыми, у меня были сообщения об ошибках. Оказывается, вы не можете переименовать исполняемый файл node. Он должен быть node.exe
, я пытался одновременно тестировать несколько версий, поэтому мне пришлось поместить их в свои собственные папки. После этого все работало нормально.