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