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!
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.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); } }
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
(nicht auf die Escapezeichen Achten, habe diese extra hier herausgenommen)."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"
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);Kennt sich da jemand aus? Ich meine wie man einen output generiertC:\Programm Files ist kein Parameter
Thema: Prozess Output umleiten
-
05.10.2011, 15:17 #1
[C#] Prozess Output umleiten
- Anzeige
Logge dich ein, um diese Anzeige nicht zu sehen. -
05.10.2011, 15:28 #2
[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...
-
05.10.2011, 15:34 #3
[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.
-
05.10.2011, 15:46 #4
[C#] AW: Prozess Output umleiten
ne geht auch nicht!
-
05.10.2011, 18:33 #5
[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
-
06.10.2011, 09:24 #6
[C#] AW: Prozess Output umleiten
cool es funktioniert! Aber es ist eigentlich ein Sicherheitsrisiko wenn man Batch Dateien ausführen lässt...
danke lynxx
-
06.10.2011, 11:28 #7
[C#] AW: Prozess Output umleiten
Alternativ versuch mal:
und/oder:Code:var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/S /C "+ param);
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
-
13.10.2011, 09:43 #8
[C#] AW: Prozess Output umleiten
Mit den Hochkommas schein die cmd zu schlucken, mit /S funktioniert es aber nicht!
Danke

Zitieren