Benutzer mit den meisten Antworten
Rückgabewert von Process in Batch auslesen HOWTO?

Frage
-
Hallo Forum,
ich habe hier eine kleine WinForms 2.0 Anwendung die ich folgender
maßen starte: Also ohen Übergabeparameter wird die normale GUI gestartet und mit Übergabeparameter
wird die nur der Übergabeparameter geparsed und eine 1 oder 0 zurückgegeben.
Das klappt soweit alles, nur wie bekomme ich jetzt diese 0 oder 1 ausgelesen?
Am besten per Batchdatei Beispeil im moment sieht das so aus:
Gruß und TIA!
Michael
TestClientRuledJudge.exe "F.2\"test\" & \"test2\" & R\"[0-9]{1,5}\"" pause
/// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static int Main(string[] args) { if (args.Length >= 1) { Classcon.DClassify.External.ChainRules.RuleParser parser = new Classcon.DClassify.External.ChainRules.RuleParser(); bool returnValue = parser.CheckBracketSyntax(args[0]); string strReturn = ""; strReturn = "Rule:'" + strReturn + "'Ergenis:'" + returnValue.ToString() + "'" + Environment.NewLine; if (returnValue) { Console.WriteLine(strReturn); return 1; } else { Console.WriteLine(strReturn); return 0; } } else { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormMain()); return 1; } }
Antworten
-
Wenn du deine App in ner cmd.exe startest, kannst du den ErrorLevel auslesen. Der enthält den Returncode.
@echo off
my_nify_exe.exe
if errorlevel 1 (
echo Failure Reason Given is %errorlevel%
exit /b %errorlevel%
)- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 3. Juni 2011 18:51
- Als Antwort markiert Michael Brockhoff Samstag, 4. Juni 2011 04:16
-
Hallo Michael,
- ... bei mir ist es jetzt umgekehrt, spricht da etwas gegen wenn ich es so lasse?
funktionieren tut es sicher, aber es ist eben - wie Du selber eigentlich auch schon beschrieben hast - unsystematisch.
Am einfachsten kann man es hier evtl. mit dem "Principle_of_Least_Astonishment" (u.a. aus dem CleanCode) begründen, warum ein ErrorLevel 0 bei Erfolg sinnvoller ist:
Wenn sich eine Komponente überraschenderweise anders
verhält als erwartet, wird ihre Anwendung unnötig
kompliziert und fehleranfällig.Das wird sicher später in Deinem Fall einen gewissen Zusatzaufwand darstellen können, wenn gegen den Standard implementiert wird, also:
"Empfehlung" meinerseits: nimm ErrorLevel 0 für Erfolg.
ciao Frank- Als Antwort markiert Michael Brockhoff Samstag, 4. Juni 2011 16:51
-
Hallo Michael,
Hab gehört das eigentlich 0 der Rückgabewert für alles OK ist [...]
Aus der Dokumentation von Process.ExitCode:"Entwickler kennzeichnen eine erfolgreiche Beendigung üblicherweise durch einen ExitCode-Wert von 0 und Fehler durch Werte ungleich 0, anhand derer die aufrufende Methode den Grund für die nicht ordnungsgemäße Beendigung des Prozesses erkennen kann. Diese Richtlinien entsprechen der Konvention, auch wenn ihre Einhaltung nicht zwingend erforderlich ist."
Aus der Dokumentation von Main()-Rückgabewerte:
"Beim Ausführen eines Programms unter Windows wird ein evtl. von der Main-Funktion zurückgegebener Wert in einer Umgebungsvariablen mit dem Namen ERRORLEVEL gespeichert. Batchdateien können das Ergebnis der Ausführung bestimmen, indem sie die ERRORLEVEL-Variable überprüfen. In der Regel signalisiert ein Rückgabewert von 0 (null) die erfolgreiche Ausführung."Natürlich kann Dich niemand zwingen, diese Konvention zu befolgen, aber Generationen von Programmierern haben sich dran gewöhnt, dass ein Rückgabewert von 0 die Abwesenheit von Fehlern bedeutet und somit Erfolg. Das ist nicht nur unter Windows so, sondern auch unter Unix usw.
Gruß
Marcel- Als Antwort markiert Michael Brockhoff Samstag, 4. Juni 2011 16:51
Alle Antworten
-
Wenn du deine App in ner cmd.exe startest, kannst du den ErrorLevel auslesen. Der enthält den Returncode.
@echo off
my_nify_exe.exe
if errorlevel 1 (
echo Failure Reason Given is %errorlevel%
exit /b %errorlevel%
)- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 3. Juni 2011 18:51
- Als Antwort markiert Michael Brockhoff Samstag, 4. Juni 2011 04:16
-
Hallo Michael,
ja, "Errorlevel" ist hier eine Möglichkeit, wenn man auf Batch-Ebene den Rückgabewert einer so implementierten C# Exe abfragen will.
Hier noch einige Informationen dazu:[Galileo Computing :: Integrationshandbuch Microsoft-Netzwerk – 15.10 Exkurs zum Verständnis des Befehls »if errorlevel Zahl«]
http://openbook.galileocomputing.de/microsoft_netzwerk/microsoft_netzwerk_15_009.htm#Rxxobkapitel15009040001421f03b132[Setlocal]
http://msdn.microsoft.com/en-us/library/bb491001.aspx[Abfrage eines bestimmten ERRORLEVEL]
http://support.microsoft.com/kb/504265/de
ciao Frank -
danke! das wars ;)
die Test.bat sieht jetzt so aus.
Klappt wunderbar, hab gehört das eigentlich 0 der Rückgabewert für alles OK ist,
bei mir ist es jetzt umgekehrt, spricht da etwas gegen wenn ich es so lasse?
Gruß und TIA
Michael
@echo off TestClientRuledJudge.exe "F.2\"test\" & \"test2\" & R\"[0-9]{1,5}\"" if errorlevel 1 ( echo Syntax ist OK. Rueckgabewert: %errorlevel% pause exit /b %errorlevel% ) if errorlevel 0 ( echo ERROR Syntax ist NOK. Rueckgabewert: %errorlevel% pause exit /b %errorlevel% )
-
Hallo Michael,
- ... bei mir ist es jetzt umgekehrt, spricht da etwas gegen wenn ich es so lasse?
funktionieren tut es sicher, aber es ist eben - wie Du selber eigentlich auch schon beschrieben hast - unsystematisch.
Am einfachsten kann man es hier evtl. mit dem "Principle_of_Least_Astonishment" (u.a. aus dem CleanCode) begründen, warum ein ErrorLevel 0 bei Erfolg sinnvoller ist:
Wenn sich eine Komponente überraschenderweise anders
verhält als erwartet, wird ihre Anwendung unnötig
kompliziert und fehleranfällig.Das wird sicher später in Deinem Fall einen gewissen Zusatzaufwand darstellen können, wenn gegen den Standard implementiert wird, also:
"Empfehlung" meinerseits: nimm ErrorLevel 0 für Erfolg.
ciao Frank- Als Antwort markiert Michael Brockhoff Samstag, 4. Juni 2011 16:51
-
Hallo Michael,
Hab gehört das eigentlich 0 der Rückgabewert für alles OK ist [...]
Aus der Dokumentation von Process.ExitCode:"Entwickler kennzeichnen eine erfolgreiche Beendigung üblicherweise durch einen ExitCode-Wert von 0 und Fehler durch Werte ungleich 0, anhand derer die aufrufende Methode den Grund für die nicht ordnungsgemäße Beendigung des Prozesses erkennen kann. Diese Richtlinien entsprechen der Konvention, auch wenn ihre Einhaltung nicht zwingend erforderlich ist."
Aus der Dokumentation von Main()-Rückgabewerte:
"Beim Ausführen eines Programms unter Windows wird ein evtl. von der Main-Funktion zurückgegebener Wert in einer Umgebungsvariablen mit dem Namen ERRORLEVEL gespeichert. Batchdateien können das Ergebnis der Ausführung bestimmen, indem sie die ERRORLEVEL-Variable überprüfen. In der Regel signalisiert ein Rückgabewert von 0 (null) die erfolgreiche Ausführung."Natürlich kann Dich niemand zwingen, diese Konvention zu befolgen, aber Generationen von Programmierern haben sich dran gewöhnt, dass ein Rückgabewert von 0 die Abwesenheit von Fehlern bedeutet und somit Erfolg. Das ist nicht nur unter Windows so, sondern auch unter Unix usw.
Gruß
Marcel- Als Antwort markiert Michael Brockhoff Samstag, 4. Juni 2011 16:51