Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dfecd5dafb | |||
| 6d01e5ccc2 | |||
| 8da02e2392 |
Generated
+1
-1
@@ -1224,7 +1224,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "syshelper"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
dependencies = [
|
||||
"argon2",
|
||||
"axum",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "syshelper"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
||||
+32
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user