我以这种方式创建流程:
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd",
Arguments = "/C tools\\adb " + serial + command,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
}
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
然后我订阅了这个活动:
process.OutputDataReceived += Display;
我将数据附加到StringBuilder:
builder.AppendLine(e.Data);
最后,我将StringBuilder文本附加到RichTextBox。
rtb_console.AppendText(builder.ToString());
问题是,我得到的输出不等于我用cmd获得的输出。
E.g。
CMD(正确):
Line 1 text text text text
Line 2 text text text text
Line 3 text text text text
使用C#(错误):
Line 1 text text text text
Line 2 text text text text
Line 3 text text text text
执行
时,输出错误adb logcat -d > output.txt
如果我使用StandardOutput.ReadToEnd(),问题就不会发生,但是我不会得到实时输出。
我找不到问题。你能救我吗?
此致
答案 0 :(得分:-2)
好吧,最后我找到了答案。
关键是,使用没有pty的shell命令。 Pty破坏了二进制输出。
而不是
adb shell ls
使用
adb exec-out ls
更多信息:
Read binary stdout data from adb shell?
https://android.googlesource.com/platform/system/core/+/5d9d434efadf1c535c7fea634d5306e18c68ef1f
Transferring binary data over ADB shell (ie fast file transfer using tar)