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

问题描述 投票:1回答:2

我必须顺序运行control.bat文件和server.bat文件(顺便说一下,实际上是5个文件)。这些是我的ERP服务器入门程序。某些原因(例如Windows更新重新启动服务器)我试图组成一个Windows服务来控制control.bat和server.bat是否正常工作。如果其中至少有一个不起作用。它会杀死所有的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文件...

c# session process
2个回答
1
投票

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

title My Running Batch

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

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

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

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!
 }

这样你就会知道发生了什么。

© www.soinside.com 2019 - 2024. All rights reserved.