405 Stimmen

Process.start: Wie erhält man die Ausgabe?

Ich möchte ein externes Befehlszeilenprogramm von meiner Mono/.NET-Anwendung aus ausführen. Zum Beispiel würde ich gerne Folgendes ausführen mencoder . Ist es möglich:

  1. Um die Ausgabe der Kommandozeile zu erhalten und sie in mein Textfeld zu schreiben?
  2. Um den numerischen Wert für die Anzeige eines Fortschrittsbalkens mit der verstrichenen Zeit zu erhalten?

1voto

Jorge Santos Neill Punkte 1389

Die Lösung, die für mich in Win und Linux funktioniert hat, ist folgende:

// GET api/values
        [HttpGet("cifrado/{xml}")]
        public ActionResult> Cifrado(String xml)
        {
            String nombreXML = DateTime.Now.ToString("ddMMyyyyhhmmss").ToString();
            String archivo = "/app/files/"+nombreXML + ".XML";
            String comando = " --armor --recipient bibankingprd@bi.com.gt  --encrypt " + archivo;
            try{
                System.IO.File.WriteAllText(archivo, xml);                
                //String comando = "C:\\GnuPG\\bin\\gpg.exe --recipient licorera@local.com --armor --encrypt C:\\Users\\Administrador\\Documents\\pruebas\\nuevo.xml ";
                ProcessStartInfo startInfo = new ProcessStartInfo() {FileName = "/usr/bin/gpg",  Arguments = comando }; 
                Process proc = new Process() { StartInfo = startInfo, };
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.Start();
                proc.WaitForExit();
                Console.WriteLine(proc.StandardOutput.ReadToEnd());
                return new string[] { "Datei verschlüsselt", archivo + " - "+ comando};
            }catch (Exception exception){
                return new string[] { archivo, "Ausnahme: "+exception.ToString() + " - "+ comando };
            }
        }

0 Stimmen

Ausnahmen, die von allgemeinem catch(Exception) erfasst werden, müssen erneut ausgelöst werden, da sie sonst die Ausnahme verschlucken, die vom "oberen" Code erwartet werden kann. Im gegebenen Beispiel wird der Debugger nicht bei einer Ausnahme anhalten, wenn sie im try-Block auftritt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X