welsonjs/lib/winservice.js

119 lines
3.3 KiB
JavaScript
Raw Normal View History

2020-11-09 10:06:34 +00:00
//////////////////////////////////////////////////////////////////////////////////
// Windows Service API
/////////////////////////////////////////////////////////////////////////////////
2020-07-23 06:07:46 +00:00
var SHELL = require("lib/shell");
2020-11-04 07:30:52 +00:00
exports.VERSIONINFO = "Windows Service Lib (service.js) version 0.1";
2020-07-23 06:07:46 +00:00
exports.global = global;
exports.require = global.require;
// https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dd228922(v=ws.11)
exports.queryService = function(name, options) {
2020-07-26 11:40:25 +00:00
var cmd = [
"sc",
"query",
name
],
2020-07-23 06:07:46 +00:00
_options = {
type: [
2020-11-04 07:30:52 +00:00
"service", // type= {driver | service | all}
"own" // type= {own | share | interact | kernel | filesys | rec | adapt}
2020-07-23 06:07:46 +00:00
],
2020-11-04 07:30:52 +00:00
state: "active", // state= {active | inactive | all}
bufsize: "1024", // bufsize= <BufferSize>
ri: "0" // ri= <ResumeIndex>
group: "" // group= <GroupName>
2020-07-23 06:07:46 +00:00
};
2020-11-04 07:30:52 +00:00
for (var k in _options) {
if (k in options) {
2020-07-23 06:07:46 +00:00
_options[k] = options[k];
}
2020-11-04 07:30:52 +00:00
if (_options[k] !== false) {
if (Array.isArray(_options[k])) {
for (var i in options[k]) {
2020-07-26 11:40:25 +00:00
cmd.push(k + '=');
cmd.push(_options[k][i]);
2020-07-23 06:07:46 +00:00
}
} else {
2020-07-26 11:40:25 +00:00
cmd.push(k + '=');
cmd.push(_options[k]);
2020-07-23 06:07:46 +00:00
}
}
}
2020-07-26 11:40:25 +00:00
return SHELL.exec(cmd);
2020-07-23 06:07:46 +00:00
};
// https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create
exports.createService = function(name, options) {
2020-07-26 11:40:25 +00:00
var cmd = [
"sc",
"create",
name
],
2020-07-23 06:07:46 +00:00
_options = {
2020-11-04 07:30:52 +00:00
type: "share", // type= {own | share | kernel | filesys | rec | interact type= {own | share}}
start: "demand", // start= {boot | system | auto | demand | disabled | delayed-auto }
error: "normal", // error= {normal | severe | critical | ignore}
binPath: false, // binpath= <BinaryPathName>
group: false, // group= <LoadOrderGroup>
tag: false, // tag= {yes | no}
depend: false, // depend= <dependencies>
obj: false, // obj= {<AccountName> | <ObjectName>}
2020-07-23 06:07:46 +00:00
DisplayName: false, // displayname= <DisplayName>
2020-11-04 07:30:52 +00:00
password: false // password= <Password>
2020-07-23 06:07:46 +00:00
};
2020-11-04 07:30:52 +00:00
for (var k in _options) {
if (k in options) {
2020-07-23 06:07:46 +00:00
_options[k] = options[k];
}
2020-11-04 07:30:52 +00:00
if (_options[k] !== false) {
if (Array.isArray(_options[k])) {
for (var i in options[k]) {
2020-07-26 11:40:25 +00:00
cmd.push(k + '=');
cmd.push(_options[k][i]);
2020-07-23 06:07:46 +00:00
}
} else {
2020-07-26 11:40:25 +00:00
cmd.push(k + '=');
cmd.push(_options[k]);
2020-07-23 06:07:46 +00:00
}
}
}
2020-07-26 11:40:25 +00:00
return SHELL.exec(cmd);
2020-07-23 06:07:46 +00:00
};
exports.startService = function(name, args) {
2020-07-26 11:40:25 +00:00
var cmd = [
"sc",
"start",
name
];
2020-07-23 06:07:46 +00:00
2020-11-04 07:30:52 +00:00
if (typeof(args) !== "undefined") {
2020-07-26 11:40:25 +00:00
cmd = cmd.concat(args);
2020-07-23 06:07:46 +00:00
}
2020-07-26 11:40:25 +00:00
return SHELL.exec(cmd);
};
2020-07-23 06:07:46 +00:00
2020-07-26 11:40:25 +00:00
exports.stopService = function(name) {
return SHELL.exec([
"sc",
"stop",
name
]);
2020-07-23 06:07:46 +00:00
};
exports.deleteService = function(name) {
2020-07-26 11:40:25 +00:00
return SHELL.exec([
"sc",
"delete",
name
]);
2020-07-23 06:07:46 +00:00
};