2016-12-07 9 views
1

У меня есть приложение Windows на C#, которое получает Android Logs (LOGCAT) и Android BugReport (BugReport).Как убить процесс, сгенерированный через оконную строку cmd с помощью C#?

Чтобы получить эти журналы, я использую файлы bat с такими командами. Для отчета об ошибке,

adb bugreport >>C:\User\Desktop\androidUser\bugrep%dt%_%tm%.txt 

Для LogCat,

adb logcat -long V >>C:\User\Desktop\androidUser\LogCat%dt%_%tm%.txt 

дт и тм является временными метки.

Я могу запускать обе эти команды на одном (с двумя разными кнопками на веб-странице aspx), но если я хочу остановиться только на одном из них, возникает проблема.

Проблема в том, что я не могу убить процесс, используя имя процесса как одно и то же для обеих задач. Еще одна вещь, которую я пробовал, - это сохранить идентификатор процесса во время выполнения команды и убить ее, но связанный с pid при выполнении задачи имеет cmd, поэтому задача adb продолжает работать и не убивается, как мне хотелось.

+0

Ну , как * вы можете различать эти два? Если у вас нет способа сделать это, вы ввернуты :) Процессы, запускаемые из cmd, являются процессами, как и любые другие. Почему вы запускаете их через cmd в первую очередь, если хотите отслеживать их в будущем? – Luaan

+0

Привет @Luaan, Я отвлекаюсь, выставляя их в Taskmanager Windows. Я получаю эти журналы с веб-страницы, и для получения кнопок я запускаю файлы .bat с приведенными выше инструкциями. Поэтому мне нужно использовать cmd. Любая альтернатива для cmd в этом случае? –

+2

Изучите классы 'Process' и' ProcessStartInfo'. Вы можете запускать приложения с аргументами, которые, кажется, все, что вы делаете. Не можете ли вы обойти необходимость в .bat-файлах? Это сделало бы отслеживание каждого процесса независимо тривиальным. – InBetween

ответ

1

Изучите Process и ProcessStartInfo классы. Вы можете запускать приложения с аргументами, которые, кажется, все, что вы делаете. Не можете ли вы обойти необходимость в .bat-файлах? Это сделало бы отслеживание каждого процесса независимо тривиальным.

Что-то по следующим направлениям:

var dt = .... 
var tm = .... 
var startInfo = new ProcessStartInfo("adb", $"bugreport >>C:\\User\\Desktop\\androidUser\\bugrep{dt}_{tm}.txt"); 
var bugReportingProcess = Process.Start(startInfo); 

Иногда аргументы только разобраны правильно, если указаны:

var startInfo = new ProcessStartInfo("adb", $"\"bugreport >>C:\\User\\Desktop\\androidUser\\bugrep{dt}_{tm}.txt\"");  

И теперь убивает правильный процесс прост:

if (!bugReportingProcess.HasExited) bugReportingProcess.Kill(); 
+0

Попробуем, и я дам вам знать, но звучит намного лучше. –

+0

Пытался использовать его, он правильно запускает adb.exe, но у меня возникают проблемы при передаче приведенных выше аргументов. Все еще рытье на нем! :( –