2017-06-02 6 views
4

新しいプロセスを開始しようとすると、実行するファイルが見つけられます(前とは異なる例外が投げられます)。 Hereも同様の問題ですが、権利とパーミッションの部分だけが問題になる可能性のある回答からわかります。エラーを見つけるためにRedirectStandardOutputをtrueに設定しないという考えもありました。この行を無効にしました。 アンドロイドのアプリケーションから新しいプロセスを開始するために、特別なアクセス許可、マニフェストエントリなどが必要ですか?アンドロイドアプリケーションで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が)です:のApplicationName = '/データ/ユーザー/ 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] in /Users/builder/data/lanes/4009/3a62f1ea/source/mono/mcs/class/System/System.Diagnostics/Process .cs:737

+0

どのAndroidバージョンとROMをお使いですか? –

+0

@ Samuel Tulachテスト用の私の電話は、製造元によってインストールされたデフォルトのROMを備えたアンドロイド6.0、電話Doogee x5 max proです。 – hoacin

+0

他の電話でもテストしましたか?私は、コードが正しいとエラーがいくつかのROM固有の要件によって引き起こされることです。 –

答えて

2

私の問題にさまざまなやり方で対処しようとしましたが、間違いなく簡単に私の問題を解決しました。この2行は私のコードの前にありませんでした。

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

デフォルトのファイルアクセス許可では、ファイルを実行して変更する必要がなくなりました。

0

私が推測していることは、達成しようとしているものではないということです。
ネイティブJavaライブラリファイル(stockfish-8-armeabi-v7a)を使用してプロセスを開始しています。
これはネイティブライブラリを使用する方法ではありません(PInvokeを使用する必要があります)。

ルックhereおよびhereをご覧ください。

+0

この可能性も私の頭に浮かびましたが、チェスのフォーラムで質問していたときに、この問題を理解したいと思っていた人が、この方法で開始するべきだと教えてくれました。彼らのウェブページには何も書かれていません、それはどのファイルで、どのように使用するのですか。それは非常に迷惑です。 – hoacin

関連する問題