1

We have an Electron client application that must be deployed and updated via an company wide software management system.

At the moment the running Electron client application is simple "killed" before installing an update.

Is there a way, under Windows 10, to tell the Electron client to shutdown gracefully (internally the app close event or another event should run)

Nabor
  • 1,661
  • 3
  • 20
  • 45

1 Answers1

4

Electron can handle graceful-exit in the background process for windows, and SIGTERM for Linux.

To ask "politely" app to close:

  • use taskkill without /f - details. (windows)
  • use pkill -TERM <proc-name> instead of kill details (linux)
// Quit when all windows are closed.
app.on('window-all-closed', () => {
  // On macOS it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
    console.log('if you see this message - all windows was closed')
    app.quit()
  }
})

app.on('activate', () => {
  // On macOS it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (BrowserWindow.getAllWindows().length === 0) createWindow()
})

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {
  createWindow()
})

// Exit cleanly on request from parent process.
if (process.platform === 'win32') {
  // this message usually fires in dev-mode from the parent process
  process.on('message', (data) => {
    if (data === 'graceful-exit') {
      console.log('if you see this message - graceful-exit fired')
      app.quit()
    }
  })
} else {
  process.on('SIGTERM', () => {
    console.log('if you see this message - SIGTERM fired')
    app.quit()
  })
}
vovchisko
  • 2,049
  • 1
  • 22
  • 26
  • Works fine under Linux. No Message under windows, Process is not killed but waiting. No reaction in the client. I also tried to implement SIGINT https://stackoverflow.com/questions/10021373/what-is-the-windows-equivalent-of-process-onsigint-in-node-js – Nabor Apr 16 '21 at 08:08
  • @Nabor I've updated the example. You should also handle "window-all-closed". – vovchisko Apr 16 '21 at 10:06
  • `window-all-closed` is also triggered if all windows are closed and the app is minimised to tray. Quitting the app in this scenario is breaking other use cases. So if there is really no other way, I'll implement a file listener in the app user home directory. If a specific file is created there, the app will gracefully shutdown itself. – Nabor Apr 16 '21 at 20:39