fix: fenêtres console Windows apparaissant en boucle
Sous Windows, tout processus console lancé depuis une application GUI ouvre une fenêtre cmd. WGSecure interroge `ping` et `wireguard` à chaque cycle de rafraîchissement du statut, ce qui faisait clignoter des fenêtres DOS en permanence pendant toute la durée d'exécution. Tous les appels externes passent par run_command() : le drapeau CREATE_NO_WINDOW y est désormais posé sous Windows, doublé d'un startupinfo SW_HIDE pour les lanceurs qui l'ignorent. Sans effet sous Linux. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
60e85b1c20
commit
32b44ec323
@@ -39,6 +39,27 @@ def has_root_privileges() -> bool:
|
||||
return os.geteuid() == 0
|
||||
|
||||
|
||||
# Windows ouvre une fenêtre console pour chaque processus console lancé depuis
|
||||
# une application GUI. WGSecure interroge `ping` et `wireguard` en boucle pour
|
||||
# rafraîchir le statut : sans ce drapeau, l'utilisateur voit des fenêtres DOS
|
||||
# apparaître et disparaître en permanence. CREATE_NO_WINDOW supprime la
|
||||
# console ; startupinfo/SW_HIDE couvre les lanceurs qui l'ignorent.
|
||||
_CREATE_NO_WINDOW = 0x08000000
|
||||
|
||||
|
||||
def _no_window_kwargs() -> dict:
|
||||
"""Options subprocess empêchant l'apparition d'une console sous Windows."""
|
||||
if not is_windows():
|
||||
return {}
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||
return {
|
||||
"creationflags": _CREATE_NO_WINDOW,
|
||||
"startupinfo": startupinfo,
|
||||
}
|
||||
|
||||
|
||||
def run_command(cmd: list[str], timeout: int = 10,
|
||||
env: dict | None = None) -> tuple[int, str, str]:
|
||||
try:
|
||||
@@ -48,6 +69,7 @@ def run_command(cmd: list[str], timeout: int = 10,
|
||||
text=True,
|
||||
timeout=timeout,
|
||||
env=env,
|
||||
**_no_window_kwargs(),
|
||||
)
|
||||
return result.returncode, result.stdout.strip(), result.stderr.strip()
|
||||
except subprocess.TimeoutExpired:
|
||||
|
||||
Reference in New Issue
Block a user