我在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任务保持运行并且不会像我希望的那样被杀死。
答案 0 :(得分:1)
查看Process
和ProcessStartInfo
课程。您可以使用参数启动应用程序,这些参数似乎就是您正在做的事情。你不能回避.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();