1

我正在使用node-windows将我的节点应用程序作为服务运行。因为我打算使用node-expose-sspi,所以我使用 powershell 创建了一个服务帐户(我检查了 Test-ADServiceAccount)。

如果我运行此代码

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'project-name',
  description: 'node server',
  script: 'C:\\server\\server.js'
  ,  allowServiceLogon: true
  // ,
  //  env:{
  //  name: "NODE_ENV",
  //  value: "production"
  //   }
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

// Just in case this file is run twice.
svc.on('alreadyinstalled',function(){
  console.log('This service is already installed.');
});

// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
  console.log(svc.name+' started!\nVisit http://127.0.0.1:5000 to see it in action.');
});

// Install the script as a service.
svc.install();

我得到控制台日志“项目名称已启动...”但未创建服务(我检查了 get-process)。如果我省略 'allowServiceLogon: true' 则创建服务。

如何在节点窗口中指定服务帐户?

4

1 回答 1

0

句法

node-windows v1.1.8 似乎使用的是 winsw 版本 2,因此您需要根据此xmlConfigFile.md设置选项(不要忘记-sign $)。

<serviceaccount>
  <domain>YOURDOMAIN</domain>
  <user>gmsa_account$</user>
  <allowservicelogon>true</allowservicelogon>
</serviceaccount>

疑难解答

如果没有创建服务,那是因为 gMSA 没有足够的权限 a) node-windows 的 npm 文件夹(如果你全局安装了它,这应该是C:\Users\username\AppData\Roaming\npmb) npm 文件夹的“入口点”(C:\Users\username)以及您的节点 app.js 所在的文件夹(例如C:\projects\myserverproject)。您至少需要写权限。C:\projects\myserverproject\daemon此外,不会创建daemon 文件夹 ( ) 中的 windows-node 日志文件!这使得故障排除变得更加困难。用户 LocalService 也是如此。

我的推荐

如果您完全省略allowServiceLogon和其他登录属性,则该服务将创建为 LocalSystem。LocalSystem 有足够的权限。现在您可以在 Windows GUI 中将 LocalSystem 更改为 gMSA(搜索“services.msc”)。如果 gMSA 没有足够的权限,服务将启动但立即停止。然后您可以在事件查看器中找到错误日志。错误日志将告诉您需要向哪些文件夹添加权限。

事件查看器

于 2021-09-17T19:40:51.417 回答