如何使用c#终止通过windows cmd行生成的进程?

时间:2016-12-07 11:50:00

标签: c# windows process adb android-logcat

我在C#中有一个Windows应用程序,它获取Android Logs(LOGCAT)和Android BugReport(BugReport)。

要获取这些日志,我正在使用带有命令的bat文件。 对于Bugreport,

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

对于LogCat,

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

dt和tm是时间戳。

我可以同时运行这两个命令(在aspx网页中有两个不同的按钮),但是如果我想只停止其中一个,那么就会出现问题。

问题是我不能使用进程名称来杀死进程,因为这两个任务都是相同的。我尝试的另一件事是在执行命令时保存进程ID并将其终止,但运行任务时关联的pid是cmd,因此adb任务保持运行并且不会像我希望的那样被杀死。

1 个答案:

答案 0 :(得分:1)

查看ProcessProcessStartInfo课程。您可以使用参数启动应用程序,这些参数似乎就是您正在做的事情。你不能回避.​​bat文件altoghether的需要吗?这将使每个过程的跟踪变得微不足道。

以下几行:

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();