From 92528043d0dc0d9529b9eb6e85ecafa513482068 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Wed, 29 Apr 2026 15:02:17 +0200 Subject: [PATCH] fix(ssh): puttygen sans popup GUI (CREATE_NO_WINDOW + check --help avant tentative) - evite popup unrecognised -O sur vieille version --- patch_manager_v2.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/patch_manager_v2.py b/patch_manager_v2.py index 589b196..a60c9f6 100644 --- a/patch_manager_v2.py +++ b/patch_manager_v2.py @@ -708,14 +708,41 @@ def load_key(keyfile): ["-O", "private-openssh-new", "-o", converted], ] import subprocess + # Sur Windows, empêcher puttygen.exe d'ouvrir une fenêtre GUI / popup d'erreur + creation_flags = 0 + startup_info = None + if os.name == "nt": + creation_flags = getattr(subprocess, "CREATE_NO_WINDOW", 0x08000000) + startup_info = subprocess.STARTUPINFO() + startup_info.dwFlags |= subprocess.STARTF_USESHOWWINDOW + startup_info.wShowWindow = 0 # SW_HIDE + + # Vérif rapide : tester si puttygen supporte le mode CLI (-?) + # avant de tenter la conversion → évite les popups intrusifs sur vieille version. + def _puttygen_supports_cli(pg_path): + try: + proc = subprocess.run( + [pg_path, "--help"], + capture_output=True, timeout=5, text=True, + creationflags=creation_flags, startupinfo=startup_info, + ) + out = (proc.stdout or "") + (proc.stderr or "") + return "private-openssh" in out.lower() or "-o " in out.lower() + except Exception: + return False + converted_ok = False last_stderr = "" for pg in puttygen_paths: + if not _puttygen_supports_cli(pg): + last_stderr = f"{pg} : version ancienne sans CLI export (ne supporte pas -O)" + continue for syntax in export_syntaxes: try: proc = subprocess.run( [pg, keyfile] + syntax, capture_output=True, timeout=10, text=True, + creationflags=creation_flags, startupinfo=startup_info, ) if proc.returncode == 0 and os.path.exists(converted): converted_ok = True