如何将 node-windows 与服务帐户一起使用?

How do to use node-windows with service account?

我正在使用 node-windows to run my node app as a service. Because I intend to use node-expose-sspi I created a service account 和 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();

我得到了控制台日志 'project-name started...',但是没有创建服务(我用 get-process 检查过)。 如果我省略 'allowServiceLogon: true',则会创建服务。

如何在节点中指定服务帐户-windows?

语法

node-windows v1.1.8 seems to be using winsw version 2 so you need to set the options according to this xmlConfigFile.md(不要忘记 $ 符号)。

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

疑难解答

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

我的推荐

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