3

CentOS 5.5で実行されている単純なC#Mono2.10アプリケーションがあります。

Process.Start("/path/to/myapp/myapp.exe","-someArgs");    

プロセスIDを取得して実行することができます

mono --trace=N:System.Diagnostics

Process.Startがtrueを返したことを示しているように見えるスタックを表示します。

LEAVE: System.Diagnostics.Process:Start_noshell (System.Diagnostics.ProcessStartInfo,System.Diagnostics.Process)TRUE:1
LEAVE: System.Diagnostics.Process:Start_common (System.Diagnostics.ProcessStartInfo,System.Diagnostics.Process)TRUE:1
LEAVE: System.Diagnostics.Process:Start ()TRUE:1
LEAVE: (wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()TRUE:1

これは、FileNotFoundなどの例外なしにプロセスが生成されたことを意味すると思います。

ただし、プロセスはすぐに終了するようで、取得した終了コードは255です。これは明らかな意味を持つLinuxの終了コードだと思いますが、チューブには何の役にも立ちません。

まったく同じアプリケーションを直接起動する場合

mono /path/to/myapp/myapp.exe -someArgs 

アプリケーションは例外なく正しく起動し、期待どおりに動作します。

私が台無しにしているものの手がかりはありますか?

4

4 に答える 4

4

ファイル/path/to/myapp/myapp.exeは実行可能ファイル(chmod +x /path/to/myapp/myapp.exe)ですか?Mono 2.10は、開始しているプロセスが管理された実行可能ファイルであるかどうかを確認します。管理されている場合は、現在実行中のMonoを暗黙的に使用して、MonoのCreateProcessソースなどの新しいプロセスを起動します。CreateProcessすべての詳細が含まれていますが、その中には次のものがあります。

それでもプロセスを開始できない場合Process.Startは、モノバグの可能性があります。バグを報告してもらいたいと思います。:-)

于 2011-04-06T20:07:26.293 に答える
2

プロセスとして「mono」を起動し、コマンドライン引数として「/path/to/myapp/myapp.exe-someArgs」を使用してみてください。これにより、Process.Startは通常のアプリケーション起動のように動作します。

于 2011-04-06T17:57:41.757 に答える
2

問題は、Linux自体がCIL .exeバイナリを実行するためにMonoを使用する必要があることを認識していないため、ローダーとしてld-linux.soを使用しようとしますが、これは明らかな理由で失敗します。

/path/to/myapp.exeを引数としてmonoを呼び出す必要があります。

FWIW、255の終了コードは単なる「エラー」です。

于 2011-04-06T18:31:01.033 に答える
0

このProcess.Startのオーバーロードを使用してプロセスを開始できます。

Process.Start("/bin/bash", "-c \"echo 'Hello World!'\"");

理由はわかりませんが、機能します。

于 2017-04-18T19:40:17.023 に答える