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
|
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,
|
def run_command(cmd: list[str], timeout: int = 10,
|
||||||
env: dict | None = None) -> tuple[int, str, str]:
|
env: dict | None = None) -> tuple[int, str, str]:
|
||||||
try:
|
try:
|
||||||
@@ -48,6 +69,7 @@ def run_command(cmd: list[str], timeout: int = 10,
|
|||||||
text=True,
|
text=True,
|
||||||
timeout=timeout,
|
timeout=timeout,
|
||||||
env=env,
|
env=env,
|
||||||
|
**_no_window_kwargs(),
|
||||||
)
|
)
|
||||||
return result.returncode, result.stdout.strip(), result.stderr.strip()
|
return result.returncode, result.stdout.strip(), result.stderr.strip()
|
||||||
except subprocess.TimeoutExpired:
|
except subprocess.TimeoutExpired:
|
||||||
|
|||||||
Reference in New Issue
Block a user