如何让ADB命令工具显示操作的成功与失败状态?
问题解决:给ADB工具添加命令执行状态反馈
你的核心问题是现有代码只读取了ADB命令的标准输出,没获取执行退出码和错误输出,无法判断命令是否真的执行成功。下面是具体的修改方案:
第一步:封装ADB执行结果
先创建一个类统一存储命令执行的关键信息,方便后续判断和展示:
public class AdbExecutionResult { // 命令执行退出码(0=成功,非0=失败) public int ExitCode { get; set; } // 命令标准输出内容 public string StandardOutput { get; set; } // 命令错误输出内容(权限不足、包名不存在等错误信息) public string ErrorOutput { get; set; } // 快速判断执行是否成功 public bool IsSuccess => ExitCode == 0; }
第二步:修改ADB执行方法
更新原有的ADB调用逻辑,增加错误输出重定向、进程等待、退出码获取:
public static AdbExecutionResult ExecuteAdbCommand(string cmd) { var result = new AdbExecutionResult(); string adbPath = Path.Combine(Environment.CurrentDirectory, "adb", "adb.exe"); using (Process process = new Process()) { process.StartInfo = new ProcessStartInfo() { UseShellExecute = false, CreateNoWindow = true, FileName = adbPath, Arguments = cmd, RedirectStandardOutput = true, RedirectStandardError = true // 新增:重定向错误输出 }; process.Start(); // 异步读取输出避免死锁 string output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); // 等待进程完全执行完毕 process.WaitForExit(); result.ExitCode = process.ExitCode; result.StandardOutput = output; result.ErrorOutput = error; } return result; }
第三步:在业务逻辑中判断执行状态
以禁用应用包为例,调用修改后的方法,根据结果展示不同状态:
// 示例:禁用指定应用包 public void DisableAppPackage(string packageName) { string adbCmd = $"shell pm disable-user {packageName}"; var executionResult = ExecuteAdbCommand(adbCmd); if (executionResult.IsSuccess) { MessageBox.Show($"禁用应用 {packageName} 成功"); } else { string errorMsg = $"禁用应用 {packageName} 失败,错误信息:{executionResult.ErrorOutput}"; MessageBox.Show(errorMsg); } }
关键说明
- 退出码:绝大多数ADB命令执行成功返回0,失败返回非0值(权限不足返回1、包名不存在返回2等),这是判断执行结果最可靠的依据。
- 错误输出:命令失败时,ADB会把具体错误信息输出到标准错误流,帮助用户定位问题。
- WaitForExit():必须等待进程执行完毕再读取输出,否则可能获取不完整内容甚至导致死锁。
内容的提问来源于stack exchange,提问作者DISCOUNT CENTRE DISCOUNTY
相关产品推荐
相关产品推荐

