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:
Mainjeśli zadeklarujesz Mainmetodę 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.
0oznacza sukces, a niezerowy oznacza niepowodzenie. return;wskazuje sukces poprzez kod wyjścia 0i 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 = Successwynika 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.
Mainmetodę w swojej aplikacji, aby zwracała wartość intzamiast void(funkcja, która zwraca wartość Integerzamiast zamiast Subw VB.Net), a następnie zwraca kod wyjścia z tej metody.Mainmetoda zwróci coś innego niż void(jest Subw 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.ExitCodenie zamyka programu natychmiast, ale Environment.Exitmetoda natychmiast zamyka program
Processobiekt, 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ź :
Mainnie ma wpływu.mainpunktu wejścia.Main()nie ustawił tego, Process.ExitCodeco widzi aplikacja wywołująca.
int Mainnadal 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ć.