1. #1
    Lt. Commander
    Dabei seit
    Dez 2007
    Beiträge
    1.737

    [C#] Prozess Output umleiten

    Eine Frage, kann man den Prozess Output direkt in eine Datei umleiten ohne zuvor den ganzen Stream einzulesen?

    Es geht eingetlich darum den xp_cmd_shell zu ersetzen durch die CLR, da die xp einigen Einschränkungen unterliegt!

    Code:
            public static void ExecuteCmd(SqlString exe, SqlString ExecString)
            {
                if (ExecString.IsNull)
                    ExecString = String.Empty;
                var startInfo = new System.Diagnostics.ProcessStartInfo(exe.Value, String.Concat(ExecString.Value));
                startInfo.CreateNoWindow = false;
                startInfo.UseShellExecute = false;
                startInfo.RedirectStandardOutput = true;
                startInfo.RedirectStandardError = true;
                startInfo.WorkingDirectory = Environment.GetEnvironmentVariable("SystemRoot");
    
                var process = System.Diagnostics.Process.Start(startInfo);
                process.WaitForExit();
                if (SqlContext.IsAvailable)
                {
                    SqlContext.Pipe.Send(process.StandardOutput.ReadToEnd());
                    String err = process.StandardError.ReadToEnd();
                    if (string.IsNullOrEmpty(err))
                    {
                        throw new Exception(err);
                    }
                }
                else
                {
                    String txt = process.StandardOutput.ReadToEnd();
                    Console.WriteLine(txt);
                    String err = process.StandardError.ReadToEnd();
                    Console.WriteLine(err);
                }
            }
    das ganze hat aber einen Hacken. Ich kann den Output nicht über den Prozess, wie im CMD mit ">" in eine Datei umleiten. Das Printen des Outputs dauert viel zu lange, egal ob man den Prozess anzeigen lässt oder nicht.

    kann man vielleicht auch einen CMD Aufruf machen? Meine erste Idee war dem xp durch den Shell Aufruf zu ersetzen, aber da akzeptiert er den Paramaeter nicht

    "C:\Program Files\Wireshark\tshark" -l -n -r "C:\test\2008_03_29-00h00m00s-full-tu1-600.trc" -R "((gtp.message == 0x10 or gtp.message == 0x11) and not (icmp)) and (ip.src or ip.dst or udp.srcport or udp.dstport or gtp.flags.version or gtp.message or gtp.teid or gtp.seq_number or gtp.tid or gtp.cause or gtp.imsi or gtp.teid_cp or gtp.teid_data or gtp.apn or gtp.msisdn or gtp.mcc or gtp.mnc or e212.mcc or e212.mnc or gtp.ext_rat_type or gtp.ext_imeisv or gtp.user_ipv4)" -T fields -e frame.time_epoch -e ip.src -e ip.dst -e udp.srcport -e udp.dstport -e gtp.flags.version -e gtp.seq_number -e gtp.teid -e gtp.teid_cp -e gtp.teid_data -e gtp.tid -e gtp.imsi -e gtp.msisdn -e gtp.apn -e e212.mcc -e gtp.mnc -e gtp.ext_rat_type -e gtp.ext_imeisv -e gtp.user_ipv4 -e gtp.cause -e gtp.message -E separator=; > "C:\test\2008_03_29-00h00m-tu1-600.dbf"
    (nicht auf die Escapezeichen Achten, habe diese extra hier herausgenommen).
    Wenn ich jetzt den mit cmd.exe und param "/C " + Quote
    bekomme ich einen Fehler
    Code:
    var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe",  "/C "+ param);
    C:\Programm Files ist kein Parameter
    Kennt sich da jemand aus? Ich meine wie man einen output generiert

  2. Anzeige
    Logge dich ein, um diese Anzeige nicht zu sehen.
  3. #2
    Fleet Admiral
    Dabei seit
    Mär 2006
    Beiträge
    14.412

    [C#] AW: Prozess Output umleiten

    evtl mal den ganzen Term quoten (param)
    Also könnte mir vorstellen, dass es irgendwie mit den Quotes zu tun haben könnte...

    Edit: Ok, scheint nicht der Fall zu sein :-)
    cmd /c dir /w
    funktioniert auch genau so wie es soll...

  4. #3
    Cadet 4th Year
    Dabei seit
    Jan 2004
    Beiträge
    118

    [C#] AW: Prozess Output umleiten

    Ich glaube, die Umleitung des output streams per > muss direkt hinter den Befehl kommen, den du aufrufst, also hier direkt hinter tshark (oder auch ganz an den Anfang als Option fürs cmd, am besten beides probieren).

    Der andere Fehler kommt daher, dass irgendwo die Anführungszeichen um den Programmpfad verloren gehen und dann die Pfadbestandteile, die durch Leerzeichen getrennt sind, als einzelen Parameter interpretiert werden.

    Probier doch einfach mal Process.Start("...\tshark.exe", ">output.txt ... restliche parameter"); ohne den ganzen anderen Kram extra einzustellen.

  5. #4
    Lt. Commander
    Ersteller dieses Themas

    Dabei seit
    Dez 2007
    Beiträge
    1.737

    [C#] AW: Prozess Output umleiten

    ne geht auch nicht!

  6. #5
    Lt. Junior Grade
    Dabei seit
    Feb 2005
    Ort
    Internet
    Beiträge
    285

    [C#] AW: Prozess Output umleiten

    Code:
    String strTemp = Path.Combine(Path.GetTempPath(), "temp.bat");
    File.WriteAllText(strTemp, param);
    var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe",  "/C "+ strTemp);
    bye, Lynxx

    Mein Sys: Cooltek K3 Evolution +USB3 | Intel i5-2500k@4.5GHz | Scythe Kabuto | ASRock Z68 Extreme4 | 2x G.Skill RipJaws-X 4GB PC3-17066U | Hauppauge WinTV Nova-S Plus | Gigabyte Radeon HD 7870 GHz Edition OC@1150/1400Mhz | Samsung Syncmaster 24" | Pioneer DVR-220BK DVD-Brenner DL | Samsung SSD 830 Series 256GB | Seagate Barracuda 7200.14 3TB | Samsung EcoGreen F4 2TB | 425W Enermax PRO82+ II | Logitech MX518 | Microsoft Strategic Commander | IBM Model M

  7. #6
    Lt. Commander
    Ersteller dieses Themas

    Dabei seit
    Dez 2007
    Beiträge
    1.737

    [C#] AW: Prozess Output umleiten

    cool es funktioniert! Aber es ist eigentlich ein Sicherheitsrisiko wenn man Batch Dateien ausführen lässt...

    danke lynxx

  8. #7
    Lt. Junior Grade
    Dabei seit
    Feb 2005
    Ort
    Internet
    Beiträge
    285

    [C#] AW: Prozess Output umleiten

    Alternativ versuch mal:
    Code:
    var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe",  "/S /C "+ param);
    und/oder:
    Code:
    var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe",  "/C \""+ param +"\"");
    bye, Lynxx

    Mein Sys: Cooltek K3 Evolution +USB3 | Intel i5-2500k@4.5GHz | Scythe Kabuto | ASRock Z68 Extreme4 | 2x G.Skill RipJaws-X 4GB PC3-17066U | Hauppauge WinTV Nova-S Plus | Gigabyte Radeon HD 7870 GHz Edition OC@1150/1400Mhz | Samsung Syncmaster 24" | Pioneer DVR-220BK DVD-Brenner DL | Samsung SSD 830 Series 256GB | Seagate Barracuda 7200.14 3TB | Samsung EcoGreen F4 2TB | 425W Enermax PRO82+ II | Logitech MX518 | Microsoft Strategic Commander | IBM Model M

  9. #8
    Lt. Commander
    Ersteller dieses Themas

    Dabei seit
    Dez 2007
    Beiträge
    1.737

    [C#] AW: Prozess Output umleiten

    Mit den Hochkommas schein die cmd zu schlucken, mit /S funktioniert es aber nicht!
    Danke

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •