2015-11-11 5 views
0

Я пытаюсь запустить процесс Wireshark и экспортировать файл .pcap в обычный текст.Как начать процесс C# Не работает

Из командной строки я могу выполнить экспорт, поэтому я знаю, что аргументы верны, а программа находится в среде PATH.

Интересно, что я использую этот кусок кода один раз этим утром, и он работал правильно. Последующие прогоны не удалось преобразовать файл.

Вот код, который я использую.

private void Button1Click(object sender, EventArgs e) 
{ 
    var stinfo = new ProcessStartInfo(); 
    stinfo.FileName = @"c:\Program Files (x86)\Wireshark\tshark.exe"; 
    stinfo.Arguments = "-V -r " + @"c:\Brian_00001_20151110133639.pcap" + " > " + @"c:\\Brian_00001_20151110133639.txt"; 
    stinfo.CreateNoWindow = true; 
    stinfo.UseShellExecute = false; 
    stinfo.RedirectStandardOutput = true; 
    stinfo.RedirectStandardError = true; 
    Process myProcess = Process.Start(stinfo); 
    myProcess.Start(); 
    myProcess.WaitForExit(); 
} 

Спасибо,

+1

Что происходит, когда вы его отлаживаете? Что означает «не работает» в этом контексте? – ernest

+1

Прочитайте вывод процесса. – CodeCaster

+0

Ernst, не работая, это не выполнение программы и преобразование файла pcap в обычный текст. –

ответ

4

> не аргумент, это оператор оболочки. Так как вы «проходите» неправильно, и поскольку вы отключили UseShellExecute, это не сработает.

Вам нужно сделать перенаправление вручную :)

Кроме того, когда вы говорите: «Конечно, перенаправить вывод и ошибки мне», то есть на самом деле чтения этих потоков. Если вы этого не сделаете, приложение будет зависать, когда в выходных буферах заканчивается свободное пространство. Вероятно, поэтому ваш код загадочно перестает работать - гостевая программа пишет больше, чем могут обрабатывать буферы.

+0

Luaan, это пример, который я использовал, изменяя имена программ для того, что мне нужно; Пример: Запуск программы Наследство или EXE-файл http://www.mindstick.com/Articles/4d9e98c9-8d11-41d6-ae36-8856c2b62be4/Process%20Start%20in%20C%20with%20examples –

+0

@BrianCook Эта статья никогда не упоминает использование оператора перенаправления. Он даже не перенаправляет выходы. Как это уместно? – Luaan

+0

Я добавил перенаправление при первом запуске программы и экспортировал файл в обычный текст. Я удалил обычный текстовый файл, снова запустил программу без изменений и не создал файл. вот что здесь вводит в заблуждение. Я не знал, что он не читает после перенаправления, и без этого программа линии cmd не будет конвертировать в текстовый формат. –

0

Процесс обычно не видит ничего, что приходит после оператора трубы или перенаправления (> здесь). Это анализируется оболочкой. Вы пробовали UseShellExecute = true? Я не знаю, если это что-то сделает. Но я думаю, что ваш родительский процесс нужно будет запускать из параметров оболочки или отладки, чтобы включить перенаправление вывода. В противном случае вам придется прочитать StandardOutput дочернего процесса и выгрузить его в файл самостоятельно в коде. https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput%28v=vs.110%29.aspx

+0

Спасибо, я дам этот пример попробовать. Я этого не видел. –

Смежные вопросы