roker002
Commander
- Registriert
- Dez. 2007
- Beiträge
- 2.074
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.
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
Wenn ich jetzt den mit cmd.exe und param "/C " + Quote
bekomme ich einen Fehler
Kennt sich da jemand aus? Ich meine wie man einen output generiert
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
(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);
C:\Programm Files ist kein Parameter
Kennt sich da jemand aus? Ich meine wie man einen output generiert