Ungültiges Handle nach Aufruf von FreeConsole in C#?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet
Weiß jemand wie man das beheben (...)

Mit FreeConsole löst du dich (bzw. den Prozess deines Programms) von der Konsole. Das heißt, du hast auf sie auch keinen Zugriff mehr. Du müsstest dich erst mit AttachConsole oder AllocConsole an eine Konsole binden, um wieder schreiben zu können.

(...) und vlt. auch welche Bedeutung die Rückgabewerte beider Imports haben?

Der Rückgabewert gibt bei beiden Funktionen jeweils an, ob die Aktion erfolgreich war. In dem Fall muss er ungleich 0 sein.

Suiram1 
Fragesteller
 21.04.2024, 12:26

Kann man es so beheben das auch wenn die Konsole gelöst wurde keine Exception geworden wird sobald ich versuche zu schreiben?

0
regex9  21.04.2024, 13:59
@Suiram1

Du kannst schauen, ob du das Vorhandensein der Konsole vor dem Schreiben mit GetConsoleWindow prüfen kannst. Andernfalls - nein, löse deinen Prozess entweder nicht von der Konsole, bevor absolut sicher ist, dass sie nicht mehr benötigt wird oder fange die Exception mit try-catch auf.

0
Suiram1 
Fragesteller
 21.04.2024, 14:09
@regex9

Was ich noch probiert hatte war, dass ich mit Console.SetOut(TextWriter.Null); quasi die Ausgabe für das Schreiben überschrieben habe und dann wurde auch keine Exception mehr geworfen, allerdings wurde nach AllocConsole auch nichts mehr geschrieben. Gibt es noch eine Möglichkeit um dann an den Ausgabe Stream der mit AllocConsole geöffneten Konsole zu kommen?

0
regex9  21.04.2024, 14:18
@Suiram1

Naja, du hast den Ausgabekanal überschrieben, was nun nicht sonderlich sinnvoll ist. Wieso schreibst du deine Logdaten nicht einfach in eine Textdatei (bzw. an sich können sie z.T. noch im Speicher gehalten und erst ab einer bestimmten Länge oder bei bestimmten Events persistent geschrieben werden)? Wenn sie im Programm angezeigt werden sollen, lädst du sie und fügst sie beispielsweise in ein Label ein.

1
Suiram1 
Fragesteller
 21.04.2024, 14:31
@regex9

Die Logs werden auch in eine Datei geschrieben, aber ich meine halt während des Debuggen um die Logs Live zu sehen. Dann muss ich eben schauen das während die Konsole nicht 'da' ist nichts in die Konsolen Ausgabe schreibe.

Eine letzte Frage hätte ich da noch. Als ich dazu recherchiert habe bin ich noch auf den Import AttachConsole gestoßen und dem Namen nach müsste diese doch auch eine Konsole Anhängen, allerdings ist nichts passiert beim Aufruf egal ob eine Konsole bereits Allocatet war oder nicht.

0
regex9  21.04.2024, 15:05
@Suiram1

Aber nur für das Logging brauchst du doch eigentlich keine Konsole. Mehr Funktionalität als das Speichern von Text ist nicht nötig.

Mit AttachConsole kannst du dich an eine bestehende Konsole eines anderen bestehenden Prozesses hängen. Du brauchst also eine Prozess-ID, die du der Funktion mitgeben kannst.

1