在一个构造中向 exe 发出单独的参数

本文关键字:exe 单独 参数 一个 | 更新日期: 2023-09-27 18:30:33

我目前正在尝试将多个参数通过管道传输到谷歌SDK中的adb.exe文件。 我的输入示例是:

adb shell getprop ro.build.version.release

亚行壳牌 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");
        ...
    }

对我来说,这似乎是一项繁重的任务,不断打开单个可执行文件以使其关闭,然后重新打开,直到任务完成。是否有一个整体解决方法,可能允许将多个参数管道传输到执行并获得所需的结果?

在一个构造中向 exe 发出单独的参数

adb 可以启动一个 shell,这样你就可以用 adb shell 创建 shell,然后重定向 stdin 和 stdout 直接写入它

您提出的"优化"不会带来可衡量的性能提升。adb代码非常有效。它引入的开销非常小。特别是在客户端部分。无论如何,大部分延迟来自等待设备的响应。

因此,不要再把事情复杂化了,只需运行多个adb shell会话。如果加载adb二进制文件让您非常困扰 - 只需使用套接字直接与adb服务器通信即可。看看 Mad Bee 库代码,了解如何在 c# 中做到这一点。或者只是使用库。

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