簡體   English   中英

Mono Process.Start返回ExitCode 255?

[英]Mono Process.Start returning ExitCode 255?

我有一個簡單的C#Mono 2.10應用程序在CentOS 5.5上運行,可以調用

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 

應用程序正確啟動,沒有任何異常,並按預期工作。

我搞砸了什么線索?

文件/path/to/myapp/myapp.exe是可執行文件( chmod +x /path/to/myapp/myapp.exe )嗎? Mono 2.10會檢查它啟動的進程是否是托管可執行文件,如果是,則會隱式使用當前正在執行的mono來啟動新進程,例如Mono的CreateProcess源 CreateProcess包含所有細節,但其中包括:

如果Process.Start仍然無法啟動您的進程,那么這可能是單聲道錯誤,我們很樂意報告錯誤。 :-)

嘗試啟動“mono”作為進程,並使用“/path/to/myapp/myapp.exe -someArgs”作為命令行參數。 這將導致Process.Start的行為更像您的正常應用程序啟動。

問題是Linux本身並不知道它需要使用Mono來運行CIL .exe二進制文件,所以它試圖使用ld-linux.so作為加載器,由於顯而易見的原因失敗。

您需要使用/path/to/myapp.exe作為arg調用mono。

FWIW,退出代碼255只是“錯誤”。

您可以使用Process.Start的重載啟動進程:

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

不知道為什么,但它的確有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM