Сравнивать бинарники службы по содержимому и ускорить опрос службы

fetch-zapret.mjs кладёт файлы через copyFile, а тот ставит текущее время:
после каждой сборки CI mtime новее при тех же байтах. Сравнение по времени
требовало UAC при каждом обновлении приложения и упиралось в занятый
WinDivert64.sys, ещё загруженный в ядро. Теперь сравниваем SHA-256, а если
файл всё же занят — уводим его в сторону переименованием.

Ожидание состояния службы переехало внутрь одного скрипта PowerShell: раньше
каждый опрос был отдельным процессом (~1 с на подъём .NET) с интервалом
300 мс, из чего и складывалась основная задержка включения.
This commit is contained in:
2026-09-03 08:20:35 +03:00
parent beced42f2f
commit 9288fc95cb
3 changed files with 119 additions and 56 deletions
+13
View File
@@ -56,6 +56,19 @@ export function serviceConfigPath(): string {
return join(serviceDataDir(), 'strategy.cfg')
}
/**
* Файлы, которые служба запускает из своего защищённого каталога: сам winws и всё, от чего
* он зависит при старте. Список нужен и `engine.win32.ts` (решить, надо ли копировать),
* и повышенному скрипту в `service.win32.ts` (собственно копирование) — держим его здесь,
* чтобы он не разъехался на две копии.
*/
export const SERVICE_BINARY_NAMES = [
'winws.exe',
'cygwin1.dll',
'WinDivert.dll',
'WinDivert64.sys'
] as const
/**
* Защищённая копия `winws.exe` (+ cygwin1.dll, WinDivert.dll, WinDivert64.sys) — на неё,
* а не на оригинал из папки установки приложения, указывает служба. Установка теперь