我正在运行一个文件监视器应用程序作为windows服务(W10),使用以下代码来安装该服务:
var Service = require('node-windows').Service;
const config = require('./SHR_modules/config');
// Create a new service object
var svc = new Service({
name:'SmartHR',
description: 'Smart HR file watcher',
script: require('path').join(__dirname,'watcher.js'),
workingDirectory: __dirname
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
console.log('installed as user: ' + svc.logOnAs.account)
});
svc.on('uninstall',function(){
console.log('Uninstall complete.');
console.log('The service exists: ',svc.exists);
});
svc.logOnAs.domain = config.sqlServerLogin.domain;
svc.logOnAs.account = config.sqlServerLogin.user;
svc.logOnAs.password = config.sqlServerLogin.password;
svc.install();
//svc.uninstall();以管理员身份运行代码,服务确实安装正确,但它停止了,所以当我尝试启动它时,消息是服务无法使用错误的密码启动。用户名和域是正确的。如果我将密码从config.js复制/粘贴到服务管理器中,服务将启动并从现在开始运行。为什么密码(不管它是什么)不是通过该行传递的:
svc.logOnAs.password = config.sqlServerLogin.password;正确吗?
发布于 2020-07-06 21:05:26
winsw.js中的XML生成器函数缺少一行服务帐户。原始代码:
if (config.logOnAs) {
xml.push({
serviceaccount: [
{domain: config.logOnAs.domain || 'NT AUTHORITY'},
{user: config.logOnAs.account || 'LocalSystem'},
{password: config.logOnAs.password || ''},
]
});
}工作代码:
if (config.logOnAs) {
xml.push({
serviceaccount: [
{domain: config.logOnAs.domain || 'NT AUTHORITY'},
{user: config.logOnAs.account || 'LocalSystem'},
{password: config.logOnAs.password || ''},
{allowservicelogon: 'true'}
]
});
}我将把这个更改提交给项目git。
https://stackoverflow.com/questions/62677627
复制相似问题