繁体   English   中英

NodeJS-登录到Windows事件日志?

[英]NodeJS - Logging to Windows Event Log?

我正在尝试编写一个Node应用程序,该应用程序一旦部署,将记录到Windows事件日志中。

当我使用命令行运行应用程序时,我浏览了可用的软件包,并能够成功使用节点窗口将日志写入Windows Event Viewer。 但是,当我使用pkg将应用程序转换为.exe文件并尝试运行.exe文件时,它不再登录到Windows事件日志中。

例如,我尝试编写如下基本应用程序:

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

const log = new EventLogger('TestApp');

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

如果我使用命令行(例如,节点index.js)运行此应用程序,它将记录到Windows Event Viewer。 但是,当我运行pkg将项目转换为可执行文件并尝试运行可执行文件(作为实例并使用Windows Task Scheduler)时,它不再注销。

我已经检查过以确保.exe以管理员身份运行,因此我认为这不是权限问题。 有人对为什么.exe可能未注销有任何想法吗? 是否有其他NPM软件包/库可提供登录Windows事件日志的功能?

先感谢您!

pkg将js源文件和其他资产打包到EXE中,并使用虚拟文件系统在节点进程中公开它们。 这对于大多数情况都可以正常工作,但是如果需要在流程之外使用这些资产中的任何一项,则会中断。

对于其大多数功能,node-windows模块分发一些自己的可执行文件或使用Windows内置函数。 它代表您exec()那些EXE。

  • 对于由模块分发的帮助程序,EXE必须存在于真实的文件系统上才能exec() pkg很有可能打破了这一点; 您需要分发这些EXE并将它们自己放置在磁盘上。
  • 事件日志记录使用内置的eventcreate ,它应该可以工作,但是pkg可能child_process虚拟文件系统做一些奇怪的事情,从而破坏了child_process工作方式。

无论如何,我强烈建议不要使用节点窗口进行日志记录,因为exec()是每个日志调用的新子进程。 这是非常低效的在Windows上:它必须产生一个壳(CMD.EXE),然后运行助手(eventcreate.exe),而在Windows进程创建是缓慢的。 痛苦的缓慢。

程序启动图

如果您开始记录足够的内容,您将很快通过流程簿记使整个系统崩溃。

而是使用直接调用ReportEvent API的本机模块。 windows-eventlog符合此要求。

您还需要考虑pkg关于本机模块的注释

支持使用本机插件( .node文件),但尚未解析将.node文件打包在可执行文件中。 您必须将项目使用的本机加载项部署到与可执行文件相同的目录中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM