feat: improve service start logic in installer to ensure proper error handling and feedback
CI / Windows x64 (push) Has been cancelled

This commit is contained in:
2026-08-02 20:48:12 +07:00
parent dd5f418ee0
commit 8da02e2392
+32 -3
View File
@@ -185,7 +185,18 @@ begin
SW_HIDE, ewWaitUntilTerminated, Code);
end;
procedure InstallService();
// Запускаем через net start, а не sc start, по той же причине, что и остановку:
// net дожидается фактического запуска и возвращает ошибку, если он не удался.
// sc отдаёт управление сразу, и сломанная установка выглядела бы успешной.
function StartService(): Boolean;
var
Code: Integer;
begin
Result := Exec(ExpandConstant('{sys}\net.exe'), 'start {#ServiceName}', '',
SW_HIDE, ewWaitUntilTerminated, Code) and (Code = 0);
end;
function InstallService(): Boolean;
var
Bin: String;
begin
@@ -204,7 +215,8 @@ begin
RunSc('description {#ServiceName} "Родительский контроль: следит за запуском программ."');
// Родительский контроль не должен исчезать из-за одной аварии.
RunSc('failure {#ServiceName} reset= 86400 actions= restart/5000/restart/5000/restart/60000');
RunSc('start {#ServiceName}');
Result := StartService();
end;
// Каталог данных закрываем от обычных пользователей: унаследованные от
@@ -223,6 +235,8 @@ begin
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
Started: Boolean;
begin
if CurStep <> ssPostInstall then
Exit;
@@ -231,7 +245,22 @@ begin
// только затем поднимаем службу.
LockDownDataDir();
SetPassword();
InstallService();
Started := InstallService();
// Обе проверки — про молчаливый отказ: без них установка отрапортует об
// успехе, а защиты не будет. При тихой установке (автообновление) человека
// за экраном нет, и разбираться придётся по журналу Inno, /LOG= его пишет.
if WizardSilent() then
Exit;
if not AuthConfigured() then
MsgBox('Не удалось сохранить пароль панели.'#13#10 +
'Панель откроется без пароля, и задать его сможет любой, ' +
'кто зайдёт первым.', mbError, MB_OK);
if not Started then
MsgBox('Служба не запустилась — контроль сейчас не работает.'#13#10 +
'Откройте «Службы» и посмотрите System Helper.', mbError, MB_OK);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);