Mam prostą aplikację konsolową w .NET. To tylko część testowa większej aplikacji. Chciałbym określić „kod wyjścia” mojej aplikacji konsoli. Jak mam to zrobic?
Mam prostą aplikację konsolową w .NET. To tylko część testowa większej aplikacji. Chciałbym określić „kod wyjścia” mojej aplikacji konsoli. Jak mam to zrobic?
Odpowiedzi:
3 opcje:
Main
jeśli zadeklarujesz Main
metodę zwrotu int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Będzie to wykorzystane, jeśli nic więcej nie ustawi kodu powrotu lub nie użyje jednej z pozostałych opcji powyżej).W zależności od aplikacji (konsola, usługa, aplikacja internetowa itp.) Można stosować różne metody.
0
oznacza sukces, a niezerowy oznacza niepowodzenie. return;
wskazuje sukces poprzez kod wyjścia 0
i return -1;
wskazuje niepowodzenie.
Oprócz odpowiedzi dotyczących powrotu int ... prośba o rozsądek. Proszę, proszę zdefiniować kody wyjścia w wyliczeniu, w razie potrzeby z flagami. To sprawia, że debugowanie i konserwacja są o wiele łatwiejsze (a jako bonus możesz łatwo wydrukować kody wyjścia na ekranie pomocy - masz jeden z nich, prawda?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
wynika z faktu, że potrzebny jest tylko jeden kod sukcesu, ale wielu kodów błędów, takich jak 0, ponieważ nie ma + lub - w liczbach całkowitych komputera, można użyć do jednoznacznej identyfikacji sukcesu
Istnieją trzy metody zwracania kodu wyjścia z aplikacji konsoli.
Main
metodę w swojej aplikacji, aby zwracała wartość int
zamiast void
(funkcja, która zwraca wartość Integer
zamiast zamiast Sub
w VB.Net), a następnie zwraca kod wyjścia z tej metody.Main
metoda zwróci coś innego niż void
(jest Sub
w VB.Net), wówczas wartość tej właściwości zostanie zignorowana.Ważnym standardem, którego należy przestrzegać, jest 0
„sukces”.
W pokrewnym temacie rozważ użycie wyliczenia do zdefiniowania kodów zakończenia, które aplikacja zwróci. FlagsAttribute pozwoli Ci powrócić kombinacji kodów.
Upewnij się także, że twoja aplikacja jest skompilowana jako „Aplikacja konsolowa”.
Environment.ExitCode
nie zamyka programu natychmiast, ale Environment.Exit
metoda natychmiast zamyka program
Process
obiekt, możesz poprosić o obiekt WaitForExit()
, a następnie poprosić o kod wyjścia z niego.
Jeśli zamierzasz skorzystać z metody sugerowanej przez Davida, powinieneś także spojrzeć na atrybut [Flagi].
To pozwala ci wykonywać nieco mądre operacje na wyliczeniach.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Następnie
(ExitCodes.SignFailed | ExitCodes.UnknownError)
będzie 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Wystarczy zwrócić odpowiedni kod z głównego.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Użyj ExitCode, jeśli twój main ma podpis void return, w przeciwnym razie musisz go „ustawić” na podstawie zwracanej wartości.
Environment.ExitCode Właściwość
Jeśli metoda Main zwróci wartość void, możesz użyć tej właściwości do ustawienia kodu wyjścia, który zostanie zwrócony do środowiska wywołującego. Jeśli Main nie zwróci void, ta właściwość jest ignorowana. Początkowa wartość tej właściwości wynosi zero.
Jako aktualizacja Scott Munro jest odpowiedź :
Main
nie ma wpływu.main
punktu wejścia.Main()
nie ustawił tego, Process.ExitCode
co widzi aplikacja wywołująca.
int Main
nadal może być używany jako alternatywa dla Environment.ExitCode. link
Opcja wyliczenia jest doskonała, ale można ją ulepszyć, mnożąc liczby jak w:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
W przypadku wielu błędów, dodanie określonych numerów błędów razem daje unikalny numer, który będzie reprezentował kombinację wykrytych błędów.
Na przykład poziom błędu 6 może składać się tylko z błędów 4 i 2, 12 może składać się tylko z błędów 4 i 8, 14 może składać się tylko z 2, 4 i 8 itd.
Moje 2 centy:
Systemowe kody błędów można znaleźć tutaj: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Znajdziesz typowe kody, takie jak 2 dla „nie znaleziono pliku” lub 5 dla „odmowy dostępu”.
A kiedy natkniesz się na nieznany kod, możesz użyć tego polecenia, aby dowiedzieć się, co to znaczy:
net helpmsg decimal_code
na przykład
pomoc netto 1
zwroty
Niepoprawna funkcja
Użyj tego kodu
Environment.Exit(0);
użyj 0 jako int, jeśli nie chcesz niczego zwracać.