Mono Process.Start返回ExitCode 255?

时间:2011-04-06 17:55:57

标签: c# linux mono exit-code

我在CentOS 5.5上运行一个简单的C#Mono 2.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 个答案:

答案 0 :(得分:4)

文件/path/to/myapp/myapp.exe是可执行文件(chmod +x /path/to/myapp/myapp.exe)吗? Mono 2.10会检查它启动的进程是否是托管可执行文件,如果是,则会隐式使用当前正在执行的mono来启动新进程,例如Mono's CreateProcess sourceCreateProcess包含所有细节,但其中包括:

如果Process.Start仍无法启动您的流程,那么这是一个可能的单一错误,我们很乐意报告错误。 : - )

答案 1 :(得分:2)

尝试启动“mono”作为进程,并使用“/path/to/myapp/myapp.exe -someArgs”作为命令行参数。这将导致Process.Start的行为更像您正常的应用程序启动。

答案 2 :(得分:2)

问题是Linux本身并不知道它需要使用Mono来运行CIL .exe二进制文件,所以它尝试使用ld-linux.so作为加载器,这显然是因为失败。

您需要使用/path/to/myapp.exe作为arg调用mono。

FWIW,退出代码255只是“错误”。

答案 3 :(得分:0)

您可以使用Process.Start的重载启动进程:

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

不知道为什么,但它确实有效。