Die Angabe der Return-Fehler-Code auf das Beenden der Anwendung
Wie kann der return-Fehler-code angegeben werden, auf das beenden der Anwendung? Wenn dies ein VC++ - Anwendung, die ich verwenden könnte, die SetLastError(ERROR_ACCESS_DENIED)
-- return GetLastError()
APIs. Gibt es eine Möglichkeit in C#?
static int Main(string[] args)
{
Tool.Args = args;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Download_Tool());
return Tool.ErrorCode;
}
Wie kann die Tool.ErrorCode
Wert eingestellt werden intelligably? Wenn ich versuche so etwas wie Tool.ErrorCode = ERROR_ACCESS_DENIED
, bekomme ich eine Fehlermeldung, "Der name ERROR_ACCESS_DENIED existiert nicht im aktuellen Kontext." Danke.
ZUSÄTZLICHE INFORMATIONEN
Mein Beispiel ist stark vereinfacht. Gibt es eine Möglichkeit, so etwas wie dieses:
Tool.ErrorCode = ERROR_ACCESS_DENIED;
return Tool.ErrorCode;
...das erzeugt einen compile-Fehler, sondern als das:
Tool.ErrorCode = 5;
return Tool.ErrorCode;
...das funktioniert, aber es verwendet eine "Magische Zahl". Ich möchte vermeiden, die Verwendung von magic numbers.
InformationsquelleAutor Jim Fell | 2010-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://msdn.microsoft.com/en-us/library/system.environment.exit.aspx
Update
Der Grund, warum man einen Kompilierfehler mit "ERROR_ACCESS_DENIED" steht, weil Sie nicht definiert haben. Sie müssen definieren Sie selbst:
Dann können Sie verwenden:
Update 2
Wenn Sie sich für einen vorgefertigten Satz von winerror.h Konstanten für Ihre C# braucht, dann hier ist es:
http://www.pinvoke.net/default.aspx/Constants/WINERROR.html
Ich würde wahrscheinlich ändern die GetErrorName (...) - Methode, um einige der caching-obwohl, z.B.:
Ich würde gerne wissen, warum diese gewählt wurde, nach unten. Hoffentlich war es nicht nach der Frage wurde aktualisiert. Ich bin nicht ein Gedankenleser... Das wäre ziemlich schlecht.
Microsoft hat bereits diese Fehler-codes irgendwo definiert. In einer VC++ Anwendung auf Sie zugegriffen werden kann, indem
#include "Winerror.h"
. Ist es nicht etwas ähnliches für C#? msdn.microsoft.com/en-us/library/ms681381(VS.85).aspxMeines Wissens nach Nein gibt es nicht. In der Vergangenheit, wenn dabei PInvoke habe ich einfach genommen, header-Dateien und extrahiert die Konstanten in C# helper-Klasse, um die Parität sind Sie nach. C# in nicht Win32.
Ich habe aktualisiert die Antwort auf einen link, um C# - code für eine Klasse, die alle winerror.h Konstanten. HTH.
InformationsquelleAutor Tim Lloyd
Set
Environment.ExitCode
.Sehen MSDN - Umgebung.ExitCode-Eigenschaft
Das problem mit diesem code-snippet, dass der Wert des
Environment.ExitCode
wird ignoriert, wenn dieMain
Methode gibt, etwas anderes als void (d.h.int
in diesem Fall).Ich änderte den code-snippet zu "void" zurückgeben, so dass Umgebung.Exit-Code wird nicht ignoriert werden.
InformationsquelleAutor Jon Adams