【问题标题】:How to kill a process generated through windows cmd line using c#?如何使用 c# 杀死通过 windows cmd 行生成的进程?
【发布时间】:2016-12-07 11:50:00
【问题描述】:

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

为了获取这些日志,我使用带有类似命令的 bat 文件。 对于错误报告,

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 任务继续运行并且没有如我所愿地被杀死。

【问题讨论】:

  • 那么,您如何 区分这两者?除非你有办法做到这一点,否则你就完蛋了 :) 从 cmd 运行的进程与其他进程一样。如果您想在将来跟踪它们,为什么首先通过 cmd 运行它们?
  • 嘿@Luaan,我通过在 Windows 的 Taskmanager 中监视它们来区分它们。我从网页中获取这些日志,并且为了获取按钮,我使用上述说明运行 .bat 文件。所以我需要使用cmd。 cmd 在这种情况下还有其他选择吗?
  • 查看ProcessProcessStartInfo 类。您可以使用参数启动应用程序,这似乎就是您所做的一切。你不能完全回避 .bat 文件的需要吗?这将使独立跟踪每个进程变得微不足道。

标签: c# windows process adb android-logcat


【解决方案1】:

查看ProcessProcessStartInfo 类。您可以使用参数启动应用程序,这似乎就是您所做的一切。你不能完全回避 .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();

【讨论】:

  • 会试一试,我会告诉你,但听起来好多了
  • 尝试使用它,它可以正确启动 adb.exe,但我在传递上述参数时遇到了问题。还在挖! :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多