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

C#调用cmd.exe执行adb push命令无法向安卓模拟器传输文件如何解决

问题原因

  • 路径字符串转义错误:C#代码中传递的文件路径"Debug\funnels\01\01.mp4"没有使用逐字字符串标记@,反斜杠会被识别为转义符:\f匹配换页符、\0匹配空字符,最终传递给adb的路径完全错误,无法找到待推送文件。
  • 缺少错误输出捕获:代码关闭了标准输出重定向,无法获取adb执行时的错误提示(比如文件不存在、设备未连接、权限不足等),难以定位问题。
  • 冗余的cmd调用:额外调用cmd.exe属于不必要的中间层,直接调用adb.exe执行命令稳定性更高。

修复方案

方案1:修正现有代码的转义问题

只需要给文件路径添加逐字字符串标记@即可解决路径错误问题,同时开启错误输出捕获方便排查问题:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WorkingDirectory = @"C:\Users\NewSystem\source\repos\";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardError = true; // 开启错误输出捕获
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = false;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

// 给路径添加@标记,避免转义问题
cmd.StandardInput.WriteLine(@"adb -s emulator-5554 push Debug\funnels\01\01.mp4 /sdcard/Download");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();

// 输出执行日志方便排查
string output = cmd.StandardOutput.ReadToEnd();
string error = cmd.StandardError.ReadToEnd();
Console.WriteLine("执行输出:" + output);
Console.WriteLine("错误信息:" + error);

cmd.WaitForExit();

方案2:更稳定的直接调用adb方案

跳过cmd.exe中间层,直接调用adb执行命令,性能和稳定性更高:

Process adbProc = new Process();
// 建议直接写全adb.exe的绝对路径,避免环境变量未配置导致找不到adb的问题,比如:
// adbProc.StartInfo.FileName = @"C:\platform-tools\adb.exe";
adbProc.StartInfo.FileName = "adb.exe";
adbProc.StartInfo.WorkingDirectory = @"C:\Users\NewSystem\source\repos\";
// 命令参数直接放在Arguments属性中
adbProc.StartInfo.Arguments = @"-s emulator-5554 push Debug\funnels\01\01.mp4 /sdcard/Download";
adbProc.StartInfo.RedirectStandardError = true;
adbProc.StartInfo.RedirectStandardOutput = true;
adbProc.StartInfo.CreateNoWindow = true;
adbProc.StartInfo.UseShellExecute = false;
adbProc.Start();

string output = adbProc.StandardOutput.ReadToEnd();
string error = adbProc.StandardError.ReadToEnd();
Console.WriteLine("执行输出:" + output);
Console.WriteLine("错误信息:" + error);

adbProc.WaitForExit();

额外注意点

  • 如果执行后仍然报错,优先看捕获到的错误信息:如果提示adb command not found,就把FileName改成adb.exe的绝对路径;如果提示no such file or directory,就检查本地文件路径是否正确、模拟器的/sdcard/Download目录是否存在、模拟器是否开启了文件读写权限。
  • 确保执行代码时模拟器已经正常启动,且adb devices命令可以识别到emulator-5554设备。

内容的提问来源于stack exchange,提问作者Bella Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:05