2017-06-02 70 views
4

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

这是我的代码:

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):应用程序名='/数据/用户/ 0/AlienChessAndroid .AlienChessAndroid/files/stockfish-8-armeabi-v7a', CommandLine ='', CurrentDirectory ='/ data/user/0/AlienChessAndroid.AlienChessAndroid/files', 本机错误=访问被拒绝 System.Diagnostics.Process.StartWithCreateProcess (System.Diagnostics.ProcessStartInfo startInfo)[0x0018b] /Users/builder/data/lanes/4009/3a62f1ea/source/mono/mcs/class/System/System.Diagnostics/Process .cs:737

+0

你使用的是什么Android版本和ROM? –

+0

@Samuel Tulach我的手机进行测试是Android 6.0的默认ROM由制造商,手机Doogee x5最大亲安装。 – hoacin

+0

你在其他手机上测试过吗?我的事,代码是正确的,错误是由一些ROM的具体要求造成的。 –

回答

2

试图处理我的问题各种方式,我不小心来解决我的问题很容易。这两行在我的代码之前缺少。

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

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

0

我的猜测是,你所做的并不是你想要达到的。
您正在开始一个使用本机java库文件(stockfish-8-armeabi-v7a)的进程。
这不是你如何使用本地库(必须使用PInvoke)。

Look here and here

+0

这种可能性也出现在我的脑海里,但是当我在国际象棋论坛上发问时,那些我期望理解问题的人告诉我应该以这种方式开始。他们的网页上没有写什么文件,以及如何使用它。这非常烦人。 – hoacin

相关问题