一种其他方向疑似可以考虑nssm,但是未经尝试
因为pm2 startup不支持window的自动启动
目前比较通用的方案是
使用其他库生成自启动脚本,如
pm2-windows-startup
> npm install pm2-windows-startup -g
> pm2-startup install
但是我们观察一下库
https://www.npmjs.com/package/pm2-windows-startup
function enablePm2Startup() {
startOnBoot.enableAutoStart(applicationName, applicationCommand, function (error) {
if (error) {
console.log('Error while trying to add PM2 startup registry entry: ' + error);
}
else {
console.log('Successfully added PM2 startup registry entry.');
}
});
}
此处设置自启动是使用了start-on-windows-boot库
这个库的代码也是比较简单的,如下
var WinReg = require('winreg');
var startOnBoot = {
enableAutoStart: function(name, file, callback){
var key = getKey();
key.set(name, WinReg.REG_SZ, file, callback || noop);
},
disableAutoStart: function(name, callback){
var key = getKey();
key.remove(name, callback || noop);
},
getAutoStartValue: function(name, callback){
var key = getKey();
key.get(name, function(error, result){
if(result){
callback(result.value);
}
else{
callback(null, error);
}
});
}
};
var RUN_LOCATION = '\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';
function getKey(){
return new WinReg({
hive: WinReg.HKCU, //CurrentUser,
key: RUN_LOCATION
});
}
function noop(){}
module.exports = startOnBoot;
可以看到就是简单设置window注册表内容,设置到了window的开机注册表来达成开机自启动
吐槽
为什么node几句话就要搞个包