Как получить NodeJS дочерний процесс для запуска .bat файла через CMD.exe - PullRequest
0 голосов
/ 21 апреля 2020

В настоящее время я пишу панель запуска приложений для Windows, используя Electron JS и Javascript для windows. Я хочу заблокировать несколько экземпляров одного открытия приложения. Для этого я написал пакетный скрипт, который проверяет, запущен ли процесс и, если он есть, распечатывает сообщение «Программа работает», а если нет, выдает «Программа не работает».

Пакетный скрипт

echo off
tasklist /FI "IMAGENAME eq chrome.exe" 2>NUL | find /I /N "chrome.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program is running
if "%ERRORLEVEL%"=="1" echo Program is not running

Когда я запускаю это через cmd.exe, он выдает мне правильный вывод, работает приложение или нет. Однако в Javascript мне всегда дают следующее:

Вывод

Ошибка: найти: '/ I': нет такого файла или каталога find: '/ N': нет такого файла или каталога

Ошибка: find: "chrome .exe": нет такого файла или каталога

Программа не запущена

Ребенок вышел с кодом 0

рендер. js

  const { spawn } = require('child_process');
  const bat = spawn('cmd.exe', ["/c", 'multiScript.bat']);

  bat.stdout.on('data', (data) => {
    console.log(data.toString());
  });

  bat.stderr.on('data', (data) => {
    console.error(data.toString());
  });

  bat.on('exit', (code) => {
    console.log(Child exited with code ${code});
  });

Структура папки

projectfolder/
|-src/
|    |-renderer.js (File that is trying to spawn the batch file)
|    |-multiScript.bat (The bat file I am trying to execute)

1 Ответ

0 голосов
/ 21 апреля 2020

Это потому, что когда вы порождаете дочерний процесс, он выполняется в каталоге вашего основного процесса. Каждый вызываемый вами путь должен относиться к файлу, который был порожден дочерним процессом, или к абсолютному пути системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...