执行根命令并读取输出Xamarin

时间:2018-06-19 17:55:55

标签: xamarin command root execute su

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

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

但是我如何得到答案?

1 个答案:

答案 0 :(得分:0)

Java.Lang.Process类具有一些您需要阅读的有趣的StreamsInputStreamErrorStream

首先,在创建过程之后,您将需要等待。使用.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