es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Salir de la aplicación Electron-Node.js después de abrir una aplicación o archivo externo.

¿Es posible cerrar la aplicación principal después de lanzar un archivo o aplicación externa?

const child = require (‘child_process’). execFile;
const fs = require (‘fs’);
if (fs.existsSync (updateFile)) {
child (updateFile, function (err, data) {}); // inicie la actualización.exe
app.quit (); // cierre la aplicación
}

Estoy intentando abrir mi aplicación updater.exe </ code> desde el directorio temp </ code> para instalar la nueva actualización. No puedo usar el autoUpdater por alguna razón.

El actualizador.exe </ code> se crea utilizando c # .net </ code> y simplemente reemplaza los archivos antiguos con los nuevos después de la descarga, pero no puedo hacerlo mientras la aplicación principal sigue ejecutándose. Estoy pensando en matar la aplicación desde C # .net </ code> a través de Proceso pero no me parece del todo correcto.

Usando el código anterior en Electron-Node.js , el actualizador.exe </ code> también se detiene después de llamar a app.quit () </ code> ya que es solo un hijo de la aplicación principal. ¿Cuál es el método alternativo?

PD: Esto solo es compatible con Windows. Windows 10 y 11 para ser más específico.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible salir de la aplicación principal después de lanzar un archivo o aplicación externa utilizando el módulo child_process en Node.js.

    En el fragmento de código proporcionado, se verifica la existencia de updateFile y, si existe, se usa el módulo child_process para ejecutarlo (child (updateFile, function(err, data) { });). Después de ejecutar el archivo de actualización, se llama al método app.quit() para salir de la aplicación principal. Sin embargo, esto también hace que el proceso secundario (updater.exe) se cierre, lo cual no es lo que se pretende.

    Para evitar que se cierre el proceso secundario, podemos usar el método spawn en lugar del método execFile. spawn devuelve un objeto ChildProcess que representa el proceso iniciado, y podemos escuchar sus eventos para saber cuándo ha terminado de ejecutarse. Después de ejecutar el archivo de actualización con spawn, podemos agregar un escucha de eventos al evento exit del objeto ChildProcess para saber cuándo ha terminado el proceso. Una vez que el proceso ha terminado de ejecutarse, podemos llamar al método app.quit() para salir de la aplicación principal.

    Aquí hay un ejemplo de fragmento de código que muestra el enfoque:

    const { spawn } = require('child_process');
    const fs = require('fs');
    
    if (fs.existsSync(updateFile)) {
      const child = spawn(updateFile);
    
      child.on('exit', () => {
        // El proceso secundario ha terminado de ejecutarse, así que ahora podemos salir de la aplicación principal.
        app.quit();
      });
    }
    

    Tenga en cuenta que este enfoque solo funciona en sistemas operativos Windows, como se indica en la pregunta original.

Comments are closed.