Как непрерывно выводить консольное приложение в текстовый файл на C#
Я пытаюсь открыть скрытое консольное приложение с аргументами и в основном записывать его вывод в файл непрерывно, пока оно не будет остановлено.
Я попытался использовать поток памяти и записать его в файл, и это, похоже, немного подействовало. Теперь я пытаюсь воспользоваться преимуществами DataRectainedEvent, чтобы я мог дополнительно обработать вывод. Прямо сейчас я не получаю никакой продукции.
Вот как я открываю консольное приложение:
StreamWriter writer = new StreamWriter("tsharkfieldoutput.txt", true)
private void capturePackets(int device)
{
string path =
string.Format("-i " + device +
" -O SNMP -T fields -e snmp.value.oid -e snmp.VarBind -e snmp.variable_bindings -e snmp.value.octets -e snmp.name -R udp src " +
destPort);
string tshark = @"C:\Program Files\Wireshark\tshark.exe";
ProcessStartInfo ps = new ProcessStartInfo();
ps.FileName = tshark;
ps.CreateNoWindow = true;
ps.WindowStyle = ProcessWindowStyle.Hidden;
ps.UseShellExecute = false;
ps.CreateNoWindow = true;
ps.RedirectStandardOutput = true;
ps.Arguments = path;
Process process = new Process();
process.StartInfo = ps;
process.Start();
process.OutputDataReceived += new DataReceivedEventHandler(tshark_OutputDataReceived);
//Not using stream reader any more.
//StreamReader myStreamReader = process.StandardOutput;
writer.Write("Begin tshark output- " + DateTime.Now + " - " + Environment.NewLine);
}
private void tshark_OutputDataReceived(object sender, DataReceivedEventArgs arg)
{
string tsharkline = arg.Data; //arg.Data contains the output data from the process...
writer.Write(tsharkline);
}
1 ответ
Я думаю, что проблема в том, что ваша ссылка на процесс выходит из области видимости в конце функции capturePackets. Вам нужно будет либо присвоить переменной процесса ту же область действия, что и автору записи, либо подождать в функции capturePackets, пока процесс не завершится с помощью метода WaitForExit(). Хотя созданный вами процесс продолжает выполняться, когда ссылка на него выходит из области видимости (через переменную процесса), события перестают обрабатываться.