我需要在我的c#程序中执行此操作。
Process process = LaunchCommandWindow("Special args and environment set")
process.StandardInput.WriteLine("cmd1");
process.StandardInput.WriteLine("cmd2");
//Parse logs
using (Streamreader sr = new ())
{ etc etc..}
我的命令正确执行,但问题是Parse日志代码不等待cmd1和cmd2执行完成。我不能打电话给退出和处理。 waitforexit因为,在解析日志之后,我有更多的命令要执行。
以下是如何设置流程启动信息。 LaunchCommandWindow()
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = Path.Combine(Environment.SystemDirectory, "cmd.exe");
startInfo.Arguments = "/K " + newEnvironmentArgs;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
return process;
如何获取解析日志代码以等待cmd2完成?
感谢。
答案 0 :(得分:3)
如果“cmd2”将完成写入标准输出流,您可以侦听标准输出,直到看到该事件,然后从那里进行处理。
答案 1 :(得分:1)
创建一个新线程来运行任务。
使用BackgroundWorker
。
当它完成时,它会引发一个事件(在你的主线程中),你可以从中继续运行。
这将阻止您的程序挂起,如果还有其他工作要做,它可以允许您在另一个线程运行时执行此操作。
- - - - - - - - 编辑
经过进一步研究,以下是对其余部分的思考:
如果要读取输出,则必须将RedirectStandardOutput
设置为true。
如果您没有拥有在同一窗口中运行这两个命令,则可以调用
process.WaitForExit(int)
其中int是等待的毫秒数,然后启动一个新进程(或带有新参数的process
)来触发cmd2。
答案 2 :(得分:0)
我认为 Process.WaitForExit()方法正是您所需要的。还有 Process.HasExited 属性 并且用于启动使用“cmd / C cmd1& cmd2”
之类的东西