我必须顺序运行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文件...
您可以使用此命令设置命令提示符窗口的标题
title My Running Batch
在为命令窗口设置唯一标题后,很容易找到是否有一个带有该标题的窗口
var list = Process.GetProcesses()
.Where(p => p.MainWindowTitle == "My Running Batch");
if(list.Count() == 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!
}
这样你就会知道发生了什么。