李恒道 发表于 2023-3-29 18:38:20

pm2 startup在window提示Init system not found

一种其他方向疑似可以考虑nssm,但是未经尝试
因为pm2 startup不支持window的自动启动
目前比较通用的方案是
使用其他库生成自启动脚本,如
pm2-windows-startup
```
> npm install pm2-windows-startup -g
> pm2-startup install
```

但是我们观察一下库
https://www.npmjs.com/package/pm2-windows-startup
```js
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库
这个库的代码也是比较简单的,如下
```js
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几句话就要搞个包

zip11 发表于 2023-3-29 19:31:14

nodejs原生的功能太少,很多功能需要额外引入库,还要操心引入库的安全性问题

李恒道 发表于 2023-3-29 19:40:55

zip11 发表于 2023-3-29 19:31
nodejs原生的功能太少,很多功能需要额外引入库,还要操心引入库的安全性问题 ...

主要一个非常简单的功能
A引入B写几行
B引入C写几行
C引入D写几行
太奇怪了
一个小功能跑个cmd的问题干了四个库

zip11 发表于 2023-3-29 20:05:06

李恒道 发表于 2023-3-29 19:40
主要一个非常简单的功能
A引入B写几行
B引入C写几行


linux系统,如果安装软件,会同时下载安装依赖程序,目的是不要重复造车轮,用依赖库编程简化了复杂的操作还是省事些,但是不是官方库还得自己审核代码安全,就很费神
页: [1]
查看完整版本: pm2 startup在window提示Init system not found