如何在 Electron-Angular 项目中使用永远的监视器?

Posted

技术标签:

【中文标题】如何在 Electron-Angular 项目中使用永远的监视器?【英文标题】:How to use forever-monitor with Electron-Angular project? 【发布时间】:2019-08-27 10:38:12 【问题描述】:

我正在使用带有 Electron 的 Angular 2,并希望继续在后台运行一个进程以显示通知。我为此使用forever-monitor,它仅在开发模式下工作,但是当我使用电子打包器打包我的应用程序时,它停止工作。我的代码如下所示:

ma​​in.ts

exports.runBackgroundProcess = () =>  

// Run a background process forever
var forever = require('forever-monitor');
var child = new(forever.Monitor)('src/assets/notification-process.js', 

  env: ELECTRON_RUN_AS_NODE: 1,
  options: []
);

child.start();

我在 main.ts 中编写了一个函数,当从 Angular 组件调用时该函数将运行后台进程。 notification-process.js 中的代码如下:

notification-process.js

notifier = require('node-notifier')

notifierFun = (msg) =>  
 notifier.notify(
 title: 'Notify Me',
 message: msg,
 wait: true
 );


var CronJob = require('cron').CronJob;

new CronJob('* * * * * *', function() 
  notifierFun("Message from notification process");
);

最后我从 app.component.ts 调用函数

let main_js  = this.electronService.remote.require("./main.js");
main_js.runBackgroundProcess();

【问题讨论】:

【参考方案1】:

我认为将脚本设置在资产目录中并不是一个好主意。 我希望将其打包为额外资源。

下一个 sn-p 将允许启动您的节点进程

  var child_process = require('child_process');
   var child = child_process.fork('notification-process.js',[],
      cwd : 'resources'  
      ); 

如果打包后还是不行,可能是因为你的文件还没有打包。要将其打包为额外资源,请修改 package.json 如下: 这会将 webserver 文件夹打包到 resources/webserver 文件夹:

 "target": [
    "win": 
      "target": "nsis",
      "icon": "build/icon.ico",
       "extraResources" : [
        "from" : "webserver",
        "to" : "webserver"
    ]
    ,

作为参考,看看: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options

【讨论】:

【参考方案2】:

它是这样工作的:

1- 将 notification-process.js 文件从资产文件夹移动到主目录。

2- 更改 main.js 中的文件路径:

var child = new (forever.Monitor)(path.join(__dirname, 'notification-process.js')...

不使用join,打包应用后不起作用。

【讨论】:

以上是关于如何在 Electron-Angular 项目中使用永远的监视器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gtkmm 在 TreeView 中使单个项目变为粗体?

如何使用自动布局在界面构建器中使一个项目的位置等于另一个项目的高度?

如何在我的项目中使角度材料 DIALOG 可共享?

Visual Studio 2005,如何获得解决方案中使用项目的位置?

如何仅使用主 git 分支在 Jenkins 中使我的项目自动从开发部署到登台并手动部署到生产

如何在 laravel 查询生成器中使隐藏属性可见?