如何通知Windows该服务已启动?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通知Windows该服务已启动?相关的知识,希望对你有一定的参考价值。

我正在使用pkg npm模块运行一个打包为exe二进制文件的nodejs HTTP服务器。我需要将其作为Windows服务运行。正常启动时效果很好。但是如果我将它作为Windows服务运行,会发生什么:

  • 我开始服务。
  • Windows尝试启动该服务。
  • 在此期间,HTTP服务器是可访问的,并且工作正常
  • Windows服务在30秒后因错误而超时:“服务未及时响应启动或控制请求。”

在我看来,我不得不告诉Windows我的服务已经开始,让我保持开放。

我怎样才能做到这一点?

答案

常规应用程序无法用作Windows服务。作为the reference states,实施应满足某些要求,

服务程序必须包含的服务控制管理器(SCM)的接口要求:

服务入口点

服务服务主要功能

服务控制处理程序功能

os-service包允许安装启动Node.js脚本的服务。默认情况下,当前脚本被视为入口点:

const osService = require('os-service');

const [action] = process.argv.slice(2);

function errorHandler(err) {
  if (!err) return;
  console.error(err);
  process.exit(1);
}

if (action === '--install') {
  osService.add('Foo', errorHandler);
} else if (action === '--uninstall') {
  osService.remove('Foo', errorHandler);
} else {
  // report service as running
  osService.run('Foo', () => {
    osService.stop();
  });

  // app entry point
}

以上是关于如何通知Windows该服务已启动?的主要内容,如果未能解决你的问题,请参考以下文章

(已解决)禁用Windows 10系统弹出窗口(重新启动,更新,低功耗)

服务被破坏时如何创建通知

如何使用 Qt 启动/停止 Windows 服务?

如何使用Windows服务弹出应用程序c#

Windows azure 中的 APNS

Windows 服务启动错误 1069