C#流程列表Cmd流程原始名称

时间:2019-04-26 14:00:22

标签: c# session process

我必须依次运行control.bat文件和server.bat文件(实际上是5个文件)。这些是我的ERP服务器入门程序。由于某种原因(例如Windows Update重新启动服务器),我试图组成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是。是否有解决方案找到从control.bat,server.bat ...运行的cmd文件...

2 个答案:

答案 0 :(得分:1)

您可以使用此命令为命令提示符窗口设置标题

title My Running Batch

为命令窗口设置唯一的标题后,很容易找到是否有带有该标题的窗口

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

if(list.Count() == 0)
    ....

答案 1 :(得分:0)

您看不到特定的批处理文件是否正在以这种方式运行-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!
 }

这样,您将知道发生了什么事。