xamarin - 执行根命令并读取输出 Xamarin

标签 xamarin command root execute su

我无法从根目录读取文件。 怎么做? 我使用命令来读取

Java.Lang.Process suProcess =  Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" });

但是我怎样才能得到答案呢?

最佳答案

Java.Lang.Process 类有一些有趣的Streams,您需要从中读取。 InputStreamErrorStream

首先,创建流程后,您需要等待它。这可以通过 .WaitForAsync() 很好地完成。这将允许您回答在请求 root 权限时通常出现的任何对话框等。

.WaitForAsync() 返回时,它会给您一个退出代码。 0 表示一切顺利,任何其他退出代码表示可能存在错误。

在退出代码 0 的情况下,您可以从 InputStream 中读取并获取您要查找的内容。

所以你的代码最终会看起来像这样:

async Task<string> GetVpnStatus()
{
    var process = Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" });
    var exitCode = await process.WaitForAsync();

    if (exitCode == 0)
    {
        using (var outputStreamReader = new StreamReader(process.InputStream))
            return await outputStreamReader.ReadToEndAsync();
    }

    if (process.ErrorStream != null)
    {
        using (var errorStreamReader = new StreamReader(process.ErrorStream))
            return await errorStreamReader.ReadToEndAsync();
    }

    return null;
}

结果看起来像这样

ppp0
10.0.0.42/32
0.0.0.0/0
105.112.3.1 123.234.12.55

关于xamarin - 执行根命令并读取输出 Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50934376/

相关文章:

android - 在没有 Root 或警告的情况下在 Android 上安装 Trust Bundle 证书

linux - 我可以在主目录中安装 Mercurial 吗?

visual-studio - 基于 Xamarin 中构建配置的 iOS/Android 项目的不同 `google-services.json/GoogleService-Info.plist`

wpf - ContextMenu 命令绑定(bind)未随数据源更新

ios - UIAlertView 弹出窗口不允许我向上滑动控制中心

apache - 内容安全策略无效命令

perl - 在 perl 脚本中运行多个 shell 命令

c - 试图了解缓冲区溢出和 setuid。我没有特权

android - 错误的 Xamarin 形成图像维度

c# - SQLite-Net-PCL死锁问题