Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 27 Noviembre 2012, 09:52 am



Título: (SOLUCIONADO) Como agarrar el error-output de un proceso?
Publicado por: Eleкtro en 27 Noviembre 2012, 09:52 am
Hola,

Necesito agarrar el error output de la CMD en este código, pero no sé como hacerlo, solo me agarra el output standard. ¿Me pueden indicar como se hace?

Muchas gracias!

PD: Ya sé que es una mala práctica usar comandos externos, pero no encuentro ninguna librería que sirva para buscar metadataos Y A LA VEZ convertir videos, eso es dificil, estoy aprendiendo!


Código
  1.                If metadata = True Then
  2.                    Dim ffmpeg_process As New Process()
  3.                    Dim ffmpeg_startinfo As New ProcessStartInfo()
  4.                    ffmpeg_startinfo.FileName = "cmd.exe "
  5.                    ffmpeg_startinfo.UseShellExecute = False
  6.                    ffmpeg_startinfo.CreateNoWindow = False
  7.                    ffmpeg_startinfo.Arguments = "/C ffmpeg.exe -y -i " & ControlChars.Quote & aFile.FullName.ToString() & ControlChars.Quote & " -f ffmetadata " & ControlChars.Quote & "%TEMP%\" & aFile.Name.ToString() & "_metadata.txt" & ControlChars.Quote & " >NUL 2>&1 && Type " & ControlChars.Quote & "%TEMP%\" & aFile.Name.ToString() & "_metadata.txt" & ControlChars.Quote & "| FINDSTR /I " & ControlChars.Quote & "^INAM ^title" & ControlChars.Quote
  8.                    ffmpeg_startinfo.RedirectStandardOutput = True
  9.                    ffmpeg_process.EnableRaisingEvents = True
  10.                    ffmpeg_process.StartInfo = ffmpeg_startinfo
  11.                    ffmpeg_process.Start()
  12.                    Dim readerStdOut As IO.StreamReader = ffmpeg_process.StandardOutput
  13.                    Do While readerStdOut.EndOfStream = False
  14.                        consolebox.AppendText(readerStdOut.ReadLine() + vbNewLine)
  15.                        consolebox.SelectionStart = consolebox.Text.Length
  16.                        consolebox.ScrollToCaret()
  17.                    Loop
  18.                End If


Título: Re: Como agarrar el error-output de un proceso?
Publicado por: kub0x en 27 Noviembre 2012, 13:35 pm
Código
  1. proceso.redirectstandarderror = true
  2. Dim stderr as string = Proceso.standarderror.readtoend
  3.  

simplemente configuras el proceso para que redireccione los posibles errores.

Saludos dsd android


Título: Re: Como agarrar el error-output de un proceso?
Publicado por: seba123neo en 27 Noviembre 2012, 13:57 pm
usa un wrapper de ese ffmpeg.exe, asi te evitas escribir cada comando de conversion de video, ya te viene todo programado en una libreria lista para usar en .NET, hay varias, pero una de las mejores es:

ffmpeg-sharp (http://code.google.com/p/ffmpeg-sharp/)

saludos.



Título: Re: Como agarrar el error-output de un proceso?
Publicado por: Eleкtro en 27 Noviembre 2012, 14:07 pm
ffmpeg-sharp (http://code.google.com/p/ffmpeg-sharp/)

Cita de: SOURCEFORGE
Your search did not generate any results.
You may want to try your search over all downloads.

This project currently has no downloads.

xD?

Te lo agradezco Seba, buscaré otro parecido...

Saludos


Título: Re: Como agarrar el error-output de un proceso?
Publicado por: seba123neo en 27 Noviembre 2012, 14:18 pm
cambio de pagina el proyecto, ahora esta en sourceforge:

SharpFFmpeg (http://sourceforge.net/projects/sharpffmpeg/)

y aca tenes otro:

FFmpeg.NET (http://ffmpegdotnet.codeplex.com/)

saludos.


Título: Re: Como agarrar el error-output de un proceso?
Publicado por: Eleкtro en 27 Noviembre 2012, 15:59 pm
Código
  1. proceso.redirectstandarderror = true
  2. Dim stderr as string = Proceso.standarderror.readtoend
  3.  

simplemente configuras el proceso para que redireccione los posibles errores.

Saludos dsd android

Gracias Kubox, aunque me expliqué mal, yo lo que necesitaba era el ExitCode, pero ya está.



Sobre el SharpFFmpeg, me voy a abstener de usarlo, aparte de porque el proyecto tiene SEIS años de antiguedad sin actualizarse, solo hay ejemplos escritos en C#, así que ni idea tengo xD.

Y el FFMPEG.Net no soporta codificación de video, y si no he entendido mal solo soporta pistas WAV, está muy verde, así que tampoco me sirve...

Saludos!