You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:00:09