Mono Process. Начать возвращать ExitCode 255? - PullRequest
3 голосов
/ 06 апреля 2011

У меня есть простое приложение C # Mono 2.10, работающее на CentOS 5.5, которое вызывает

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

Я могу вернуть идентификатор процесса и запустить с

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 голосов
/ 07 апреля 2011

Является ли файл /path/to/myapp/myapp.exe исполняемым файлом (chmod +x /path/to/myapp/myapp.exe)?Mono 2.10 проверяет, является ли процесс, который он запускает, управляемым исполняемым файлом, и в этом случае будет неявно использовать текущее моно для запуска нового процесса, например, Источник CreateProcess Mono .CreateProcess содержит все детали, но среди них:

Если Process.Start все еще не удается запустить ваш процесс, то это вероятная моно-ошибка, и мы хотели бы сообщить об ошибке для нее.: -)

2 голосов
/ 06 апреля 2011

Проблема в том, что сам Linux не знает, что ему нужно использовать Mono для запуска двоичных файлов CIL .exe, поэтому он пытается использовать ld-linux.so в качестве загрузчика, который по понятным причинам завершается неудачей.

Вам нужно вызвать mono с /path/to/myapp.exe в качестве аргумента.

FWIW, код выхода 255 - это просто "ошибка".

2 голосов
/ 06 апреля 2011

Попробуйте запустить «mono» как процесс и используйте «/path/to/myapp/myapp.exe -someArgs» в качестве аргументов командной строки.Это приведет к тому, что Process.Start будет вести себя как обычный запуск приложения.

0 голосов
/ 18 апреля 2017

Вы можете запустить процесс, используя эту перегрузку Process.Start:

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

Не знаю почему, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...