在一个构造中向Exe发出Seperate Arpements

时间:2014-11-17 00:55:05

标签: c# adb

我目前正在尝试将多个参数传输到google sdk中的adb.exe文件。我输入的一个例子是:

  

adb shell getprop ro.build.version.release

     

adb shell getprop ro.product.brand

从我的应用程序输出正确。虽然,问题是我想填充信息的列表视图,但我目前遇到的问题是管道命令以获得所需输出的方法。我现在得到了:

 var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "Resources/adb.exe",
                    Arguments = "devices",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = true
                }
            };
            proc.Start();
            string Output = proc.StandardOutput.ReadToEnd().ToString();

目前按预期返回,但我希望从以下方式获得多个结果:

Arguments = "devices ro.build.version.release ro.product.brand"

即使直接进入命令提示符,也无济于事。

  

adb shell getprop devices ro.build.version.release ro.product.brand

为空,我已经遇到了一个(假设)加载大量解决方案,即将执行的初始化移动到它自己的多次调用的函数中。请参阅以下代码:

    public string GetInfo(string CommandArg)
    {
        var proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "Resources/adb.exe",
                Arguments = CommandArg,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true
            }
        };
        proc.Start();
        return proc.StandardOutput.ReadToEnd().ToString();
    }


    public void SetDefineInformation()
    {
        AndroidVersion = decimal.Parse(GetInfo("ro.build.version.release"));
        DeviceModel = GetInfo("ro.product.device");
        ...
    }

对我来说,这似乎是一项负载繁重的任务,不断打开一个可执行文件,关闭然后重新打开,直到任务完成。是否有一个整体解决方案,可能允许一个人将多个参数传递给一个执行者并获得所需的结果?

2 个答案:

答案 0 :(得分:1)

adb可以启动shell,因此您可以使用adb shell创建shell,然后redirect stdin and stdout直接写入

答案 1 :(得分:1)

您提议的“优化”不会产生可衡量的性能提升。 adb代码效率很高。它引入的开销非常小。特别是在客户端部分。大多数延迟来自等待设备的响应。

因此,请停止过度复杂化的事情,并运行多个adb shell个会话。如果加载adb二进制文件困扰你 - 只需使用套接字直接与adb服务器通信。请查看Mad Bee library code,了解如何在c#中执行此操作。或者只是使用图书馆。

至于优化查询多个系统属性 - 只需使用adb shell getprop命令一次性提取所有属性。