我必须依次运行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文件...
答案 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!
}
这样,您将知道发生了什么事。