Список процессов C # Cmd Оригинальное имя процесса - PullRequest
1 голос
/ 26 апреля 2019

Я должен запустить файл control.bat и файл server.bat последовательно (кстати, 5 файлов).Это мои стартовые программы для серверов ERP.По какой-то причине (например, обновления Windows перезапускает сервер) Я пытаюсь создать службу Windows, чтобы контролировать, работают ли control.bat и server.bat или нет.Если хотя бы один из них не работает.Это убьет все сеансы летучей мыши и перезапустит все с C #.Я попытался, как показано ниже.

Process[] processlist = Process.GetProcesses();
foreach (var item in processlist)
{
      Process[] pname = Process.GetProcessesByName("control.bat");//there is no processname like control but cmd
      if (pname.Length == 0)
      {
                this.killAll();
                break;

      }       
}   

Но когда я контролирую список процессов, нет control.bat или server.bat ... Но cmd есть.Есть ли решение, которое находит этот cmd-файл, который запускается из control.bat, server.bat ...

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Вы можете установить заголовок для окна командной строки с помощью этой команды

title My Running Batch

После установки уникального заголовка для командного окна легко найти, если есть окно с таким заголовком

var list = Process.GetProcesses()
                  .Where(p => p.MainWindowTitle == "My Running Batch");

if(list.Count() == 0)
    ....
0 голосов
/ 26 апреля 2019

Вы не можете видеть, работает ли определенный пакетный файл таким образом - файл bat - это просто скрипт, который выполняет процесс cmd.exe.

Если вы запускаете файл bat из кода, который вы можете сортируйте из этого, проверяя, запущен ли процесс:

using System.Diagnostics;

Process proc = new Process();
proc.StartInfo.FileName = "control.bat";
if (proc.Start())
 {
 //All good!
 }
else
 {
 //Oh no! it's not running!
 }

И таким образом вы будете знать, что происходит.

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