From 0ec9762accac4b0ed50c0ce41f4175ca0c1510fc Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Tue, 5 May 2026 14:22:22 -0700 Subject: [PATCH] Windows: Fix command line output not displaying when using Git Bash Check if Dolphin already has a handle for stdout or stderr before trying to attach to the console of the parent process. Previously, running Dolphin via Git Bash with options like `--help` or `--version` wouldn't produce any output. This was the result of the fix (1ce75ce21706a8dd9662e77ac9d09de1976f4733) for https://bugs.dolphin-emu.org/issues/11042, before which output did work for `Git Bash` but didn't for `Command Prompt` or `PowerShell`. --- Source/Core/DolphinQt/Main.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Source/Core/DolphinQt/Main.cpp b/Source/Core/DolphinQt/Main.cpp index b223819e7a..0e5f5dc151 100644 --- a/Source/Core/DolphinQt/Main.cpp +++ b/Source/Core/DolphinQt/Main.cpp @@ -120,12 +120,22 @@ static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no int main(int argc, char* argv[]) { #ifdef _WIN32 - const bool console_attached = AttachConsole(ATTACH_PARENT_PROCESS) != FALSE; - HANDLE stdout_handle = ::GetStdHandle(STD_OUTPUT_HANDLE); - if (console_attached && stdout_handle) + const HANDLE stdout_handle = ::GetStdHandle(STD_OUTPUT_HANDLE); + const HANDLE stderr_handle = ::GetStdHandle(STD_ERROR_HANDLE); + + // If we already have a console don't try to use one from our parent. This happens when running + // Dolphin using `Git Bash`. + if (stdout_handle == nullptr && stderr_handle == nullptr) { - freopen("CONOUT$", "w", stdout); - freopen("CONOUT$", "w", stderr); + // See if the parent process has a console we can use (which happens when Dolphin is launched + // via `Command Prompt` or `PowerShell`). If this fails Dolphin was probably launched via the + // GUI, in which case we don't want a console anyway. + const bool attached_to_parent_console = AttachConsole(ATTACH_PARENT_PROCESS) != FALSE; + if (attached_to_parent_console) + { + static_cast(freopen("CONOUT$", "w", stdout)); + static_cast(freopen("CONOUT$", "w", stderr)); + } } #endif