在Android应用程序中的Process.Start()上访问被拒绝(0x80004005)

时间:2017-06-02 17:00:18

标签: c# android xamarin process

当我尝试启动新进程时,它会找到一个要执行的文件(就像它之前抛出不同的异常一样),但会抛出异常访问被拒绝。 Here是一个类似的问题,但只有权利和权利部分对我来说可能是一个问题的答案。还有一个想法是不将RedirectStandardOutput设置为true以便找到错误,所以我禁用了这一行。 我是否需要一些特殊权限,清单条目或类似的任何内容以启用我在Android上的应用程序启动新进程?

这是我的代码:

try
{
    string strToFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), fileName = "stockfish-8-armeabi-v7a";

    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = System.IO.Path.Combine(strToFolder, fileName);
    psi.UseShellExecute = false;
    psi.CreateNoWindow = true;
    psi.WorkingDirectory = strToFolder;
    //psi.RedirectStandardOutput = true;
    //psi.RedirectStandardError = true;

    stockfishProcess = new System.Diagnostics.Process();
    stockfishProcess.StartInfo = psi;
    stockfishProcess.Start();
}
catch (Exception e)
{
    string estr = e.ToString();
    initialized = false;
}

这是异常文本

  

System.ComponentModel.Win32Exception(0x80004005):ApplicationName ='/ data / user / 0 / AlienChessAndroid.AlienChessAndroid / files / stockfish-8-armeabi-v7a',   的CommandLine = '',   currentDirectory所= '/数据/用户/ 0 / AlienChessAndroid.AlienChessAndroid /文件',   原生错误=拒绝访问   System.Diagnostics.Process.StartWithCreateProcess   (System.Diagnostics.ProcessStartInfo startInfo)[0x0018b] in   /Users/builder/data/lanes/4009/3a62f1ea/source/mono/mcs/class/System/System.Diagnostics/Process.cs:737

2 个答案:

答案 0 :(得分:2)

试图以各种方式处理我的问题,我不小心解决了我的问题。在我的代码之前,这两行丢失了。

string[] cmd = { "chmod", "744", Path.Combine(strToFolder, fileName) };
Java.Lang.Runtime.GetRuntime().Exec(cmd);

默认文件权限不允许执行文件,因此必须更改。

答案 1 :(得分:0)

我的猜测是,你所做的并不是你想要达到的目标 您正在使用本机java库文件(stockfish-8-armeabi-v7a)启动进程 这不是您使用本机库的方式(必须使用PInvoke)。

查看herehere