NodeJS - вход в журнал событий Windows? - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь написать приложение Node, которое после развертывания будет регистрировать в журнале событий Windows.

Я просмотрел доступные пакеты и смог успешно использовать окна узлов для записи журналов в событие Windows.Просмотрщик, когда я запустил приложение с помощью командной строки.Однако когда я использовал pkg, чтобы превратить приложение в файл .exe, и попытался запустить файл .exe, он больше не входил в журнал событий Windows.

В качестве примера я попытался написать базовое приложение.следующим образом:

const EventLogger = require('node-windows').EventLogger;

const log = new EventLogger('TestApp');

log.info('Test test test!', 1000)

Если я запускаю это приложение с помощью командной строки (например, узла index.js), оно регистрируется в средстве просмотра событий Windows.Однако когда я запускаю pkg для преобразования проекта в исполняемый файл и пытаюсь запустить исполняемый файл (как в качестве экземпляра, так и с помощью планировщика задач Windows), он больше не выходит из системы.

Я уже проверил, чтобыубедитесь, что .exe работает как администратор, поэтому я не думаю, что это проблема с разрешениями.У кого-нибудь есть мысли о том, почему .exe не может выйти из системы?Существуют ли другие пакеты / библиотеки NPM, которые предоставляют возможность входа в журнал событий Windows?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 апреля 2019

pkg упаковывает исходные файлы js и другие ресурсы в EXE-файл и предоставляет их в рамках процесса узла, используя виртуальную файловую систему.Это прекрасно работает для большинства вещей, но ломается, если какой-либо из этих активов нужно использовать за пределами вашего процесса.

Для большей части своей функциональности модуль node-windows распространяет несколько собственных исполняемых файлов или использует Windowsвнутренние команды.Это exec() s этих EXE-файлов от вашего имени.

  • Для помощников, распространяемых модулем, EXE-файл должен существовать в файловой системе real , чтобыдо exec() этого.Весьма вероятно, что pkg сломает это;вам нужно будет распространять эти EXE-файлы и помещать их на диск самостоятельно.
  • В журнале событий используется встроенный eventcreate, который должен работать, но, возможно, pkgделать что-то странное с виртуальной файловой системой, которая нарушает работу child_process.

В любом случае, я настоятельно рекомендую не использовать ноды-окна для ведения журнала, потому что это exec() новый дочерний процессза каждый журнал звонка.Это очень неэффективно в Windows: он должен порождать оболочку (cmd.exe) и затем запускать помощник (eventcreate.exe), а процесс создания в Windows идет медленно.Ужасно медленно.

Program launch graph

Если вы начнете регистрировать достаточно вещей, вы скоро поставите всю свою систему на колени с помощью процесса учета.

Вместо этого используйте собственный модуль, который напрямую вызывает API ReportEvent. windows-eventlog подходит под этот счет.

Вы также можете рассмотреть замечания pkg относительно собственных модулей .

Собственные дополнения (Поддерживается использование .node файлов), но упаковка .node файлов внутри исполняемого файла еще не разрешена.Вы должны развернуть собственные дополнения, используемые вашим проектом, в том же каталоге, что и исполняемый файл.

...