c#运行守护程序命令行

c#运行守护程序命令行,c#,batch-file,C#,Batch File,我有几个批处理文件需要使用C#执行,问题是在第一个批处理文件的末尾,它正在运行一个守护进程。这会导致第二个批处理文件由于WaitForExit()而永远无法执行。我不能把它取出来,因为我不知道第一个批处理文件需要运行多长时间(直到它运行守护进程) 在BatchFile1.bat中,我有很多废话,废话,废话,最后它运行的是一个守护进程,当然永远不会退出 //not exit , even if there is error public void Run_Process(string proces

我有几个批处理文件需要使用C#执行,问题是在第一个批处理文件的末尾,它正在运行一个守护进程。这会导致第二个批处理文件由于WaitForExit()而永远无法执行。我不能把它取出来,因为我不知道第一个批处理文件需要运行多长时间(直到它运行守护进程)

在BatchFile1.bat中,我有很多废话,废话,废话,最后它运行的是一个守护进程,当然永远不会退出

//not exit , even if there is error
public void Run_Process(string process_name, string s)     
{                
    Process myProcess = new Process();

    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.FileName = "cmd.exe";
    myProcess.StartInfo.Arguments = "/C " + process_name + s;

    myProcess.StartInfo.CreateNoWindow = true;
    myProcess.StartInfo.RedirectStandardOutput = true;
    myProcess.StartInfo.RedirectStandardError = true;
    myProcess.Start();
    string standard_output = myProcess.StandardOutput.ReadToEnd();
    myProcess.WaitForExit();
    Console.WriteLine(standard_output);
}

要执行cmd.exe,可能需要执行以下操作:

static void ExecuteCommand(string command)
{
int exitCode;
ProcessStartInfo processInfo;
Process process;

processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);
process.WaitForExit();

// *** Read the streams ***
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();

exitCode = process.ExitCode;

Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
}

static void Main()
{
ExecuteCommand("echo testing");
}   

你能改变你的bat文件在后台启动守护进程吗?我不能改变bat文件。禁止您发布.bat代码吗?.bat是否向stdout写入了您可以等待的内容?为什么不在任务中启动您的进程?系统。线程。任务。工厂。StartNew(。。。。。。
static void ExecuteCommand(string command)
{
int exitCode;
ProcessStartInfo processInfo;
Process process;

processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);
process.WaitForExit();

// *** Read the streams ***
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();

exitCode = process.ExitCode;

Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
}

static void Main()
{
ExecuteCommand("echo testing");
}