Подтвердить что ты не робот

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) привет

Есть ли у кого-нибудь предложения?

4b9b3361

Ответ 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, я пытался одновременно тестировать несколько версий, поэтому мне пришлось поместить их в свои собственные папки. После этого все работало нормально.