[英]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.