Some checks failed
Windows project source guards / test (push) Failing after 25s
Замена файлов, порядок шагов, проверка запуска и откат теперь в общем ядре (байт-в-байт копия). Своё у Zapret KVN — только прослойка runner: план прежнего вида (его пишет ещё прежняя версия), журнал update.log, хвост startup.log упавшего запуска и сообщение об ошибке. Журнал замены теперь пишется на диск: замену, оборванную выключением, можно откатить. Замок окна обновления — общая переменная ZAPRET_UPDATE_HOLD. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
892 B
Python
26 lines
892 B
Python
"""Запуск установщика из работающего приложения."""
|
||
|
||
from __future__ import annotations
|
||
|
||
import subprocess
|
||
|
||
from zapret_update import processes
|
||
|
||
from . import APPLY_UPDATE_FLAG
|
||
from .plan import PLAN_FILE_NAME, InstallPlan
|
||
|
||
|
||
def launch_installer(plan: InstallPlan) -> subprocess.Popen:
|
||
"""Запустить новую сборку в режиме установки.
|
||
|
||
Приложение выходит не сразу, а когда установщик создаст
|
||
``plan.ready_marker``: если он не поднялся, закрываться незачем.
|
||
"""
|
||
|
||
plan_path = plan.work_dir / PLAN_FILE_NAME
|
||
plan.ready_marker.unlink(missing_ok=True)
|
||
plan.save(plan_path)
|
||
return processes.start_detached(
|
||
[str(plan.installer_exe), APPLY_UPDATE_FLAG, str(plan_path)],
|
||
cwd=plan.source_dir,
|
||
)
|