I’ve a problem in my project. I would like to launch a process, 7z.exe (console version).
I’ve tried three different things:
- Process.StandardOutput.ReadToEnd();
- OutputDataReceived & BeginOutputReadLine
- StreamWriter
Nothing works. It always “wait” for the end of the process to show what i want.
I don’t have any code to put, just if you want my code with one of the things listed upthere. Thanks.
Edit:
My code:
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
this.sr = process.StandardOutput;
while (!sr.EndOfStream)
{
String s = sr.ReadLine();
if (s != "")
{
System.Console.WriteLine(DateTime.Now + " - " + s);
}
}
Or
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler(recieve);
process.StartInfo.CreateNoWindow = true;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
public void recieve(object e, DataReceivedEventArgs outLine)
{
System.Console.WriteLine(DateTime.Now + " - " + outLine.Data);
}
Or
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = p.StandardOutput.ReadToEnd();
process.WaitForExit();
Where “process” is my pre-made Process
Ok i know why it doesn’t works properly: 7z.exe is the bug: it display a percent loading in console, and it sends information only when the current file is finished. In extraction for example, it works fine :). I will search for another way to use 7z functions without 7z.exe (maybe with 7za.exe or with some DLL). Thanks to all.
To answer to the question, OuputDataRecieved event works fine !
Take a look at this page, it looks this is the solution for you: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline.aspx and http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
[Edit]
This is a working example:
Btw, ls -R C:\ lists all files from the root of C: recursively. These are a lot of files, and I’m sure it isn’t done when the first results show up in the screen.
There is a possibility 7zip holds the output before showing it. I’m not sure what params you give to the proces.