From 1576056624276e80fff918efca1b44951524241d Mon Sep 17 00:00:00 2001 From: Alexey Date: Sun, 26 Jul 2026 15:54:16 +0300 Subject: [PATCH] Beta_cartrigesg_bd Beta v0.8 --- INVENTERA_INSTALLER.md | 20 ++++++++- Inventera.iss | 48 +++++++++++++++++++-- installer/configure_inventera_autostart.ps1 | 45 +++++++++++++++++++ 3 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 installer/configure_inventera_autostart.ps1 diff --git a/INVENTERA_INSTALLER.md b/INVENTERA_INSTALLER.md index 291287d..4a5a2c2 100644 --- a/INVENTERA_INSTALLER.md +++ b/INVENTERA_INSTALLER.md @@ -10,7 +10,8 @@ - проверка занятости портов; - создание базы, пользователя и конфигурации приложения; - правило брандмауэра Windows для выбранного порта Inventera; -- ярлыки Inventera в меню «Пуск», на рабочем столе и в общей автозагрузке. +- ярлыки веб-приложения Inventera в меню «Пуск» и на рабочем столе; +- автоматический запуск сервера Inventera при старте Windows. ## Автоматический режим @@ -77,6 +78,23 @@ HKEY_LOCAL_MACHINE\Software\Inventera\Installer При запуске `Inventera.Server.exe` читает из этого файла адрес и порт PostgreSQL, имя базы, логин, пароль и порт веб-приложения. Поэтому введённые в мастере значения автоматически используются кодом приложения. +## Ярлык и автозапуск + +Ярлык `Inventera` на рабочем столе открывает веб-приложение в браузере по адресу: + +```text +http://127.0.0.1:<порт Inventera> +``` + +Сервер регистрируется в Планировщике заданий Windows под именем +`Inventera Server`. Он запускается от системной учётной записи при старте +Windows, даже если пользователь ещё не вошёл в систему. При аварийном завершении +Планировщик пытается запустить его повторно до пяти раз с интервалом в одну минуту. + +При обновлении удаляется старый ярлык `Inventera Server` из общей папки +«Автозагрузка», чтобы одновременно не запускались два экземпляра сервера. +При удалении Inventera задание Планировщика также удаляется. + ## Сборка на Windows x64 Требования: diff --git a/Inventera.iss b/Inventera.iss index 2025b3a..77a5f98 100644 --- a/Inventera.iss +++ b/Inventera.iss @@ -34,20 +34,32 @@ Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: "{#PostgreSqlInstaller}"; Flags: dontcopy noencryption nocompression Source: "installer\initialize_inventera_database.ps1"; Flags: dontcopy noencryption +Source: "installer\configure_inventera_autostart.ps1"; Flags: dontcopy noencryption Source: "dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion +[INI] +Filename: "{app}\Inventera.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://127.0.0.1:{code:GetApplicationPort}" +Filename: "{app}\Inventera.url"; Section: "InternetShortcut"; Key: "IconFile"; String: "{app}\{#MyAppExeName}" +Filename: "{app}\Inventera.url"; Section: "InternetShortcut"; Key: "IconIndex"; String: "0" + [Icons] -Name: "{group}\Inventera"; Filename: "http://127.0.0.1:{code:GetApplicationPort}"; IconFilename: "{app}\{#MyAppExeName}" -Name: "{commondesktop}\Inventera"; Filename: "http://127.0.0.1:{code:GetApplicationPort}"; IconFilename: "{app}\{#MyAppExeName}" -Name: "{commonstartup}\Inventera Server"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}"; IconFilename: "{app}\{#MyAppExeName}" +Name: "{group}\Inventera"; Filename: "{app}\Inventera.url"; IconFilename: "{app}\{#MyAppExeName}"; Comment: "Открыть веб-приложение Inventera" +Name: "{commondesktop}\Inventera"; Filename: "{app}\Inventera.url"; IconFilename: "{app}\{#MyAppExeName}"; Comment: "Открыть веб-приложение Inventera" + +[InstallDelete] +Type: files; Name: "{commonstartup}\Inventera Server.lnk" + +[UninstallDelete] +Type: files; Name: "{app}\Inventera.url" [Run] Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name=""Inventera Web"""; Flags: runhidden waituntilterminated Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall add rule name=""Inventera Web"" dir=in action=allow protocol=TCP localport={code:GetApplicationPort}"; Flags: runhidden waituntilterminated -Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}"; Flags: nowait runhidden; StatusMsg: "Запуск сервера Inventera..." +Filename: "{sys}\schtasks.exe"; Parameters: "/Run /TN ""Inventera Server"""; Flags: runhidden waituntilterminated; StatusMsg: "Запуск сервера Inventera..." Filename: "http://127.0.0.1:{code:GetApplicationPort}"; Description: "Открыть Inventera"; Flags: shellexec nowait postinstall skipifsilent [UninstallRun] +Filename: "{sys}\schtasks.exe"; Parameters: "/Delete /F /TN ""Inventera Server"""; Flags: runhidden waituntilterminated; RunOnceId: "RemoveInventeraAutostart" Filename: "{sys}\taskkill.exe"; Parameters: "/F /IM ""{#MyAppExeName}"""; Flags: runhidden waituntilterminated; RunOnceId: "StopInventera" Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name=""Inventera Web"""; Flags: runhidden waituntilterminated; RunOnceId: "RemoveInventeraFirewallRule" @@ -698,6 +710,15 @@ begin '-ConfigPath ' + QuoteArgument(ExpandConstant('{commonappdata}\Inventera\config.json')); end; +function AutostartConfigurationParameters: String; +begin + Result := + '-NoProfile -NonInteractive -ExecutionPolicy Bypass -File ' + + QuoteArgument(ExpandConstant('{tmp}\configure_inventera_autostart.ps1')) + ' ' + + '-ExecutablePath ' + QuoteArgument(ExpandConstant('{app}\{#MyAppExeName}')) + ' ' + + '-WorkingDirectory ' + QuoteArgument(ExpandConstant('{app}')); +end; + function PrepareToInstall(var NeedsRestart: Boolean): String; var ExitCode: Integer; @@ -798,4 +819,23 @@ begin IntToStr(ExitCode); Exit; end; + + WizardForm.PreparingLabel.Caption := + 'Настройка автоматического запуска Inventera при старте Windows...'; + ExtractTemporaryFile('configure_inventera_autostart.ps1'); + Success := Exec( + PowerShellPath, + AutostartConfigurationParameters, + '', + SW_HIDE, + ewWaitUntilTerminated, + ExitCode + ); + if (not Success) or (ExitCode <> 0) then + begin + Result := + 'Не удалось настроить автозапуск Inventera. Код ошибки: ' + + IntToStr(ExitCode); + Exit; + end; end; diff --git a/installer/configure_inventera_autostart.ps1 b/installer/configure_inventera_autostart.ps1 new file mode 100644 index 0000000..6f59179 --- /dev/null +++ b/installer/configure_inventera_autostart.ps1 @@ -0,0 +1,45 @@ +[CmdletBinding()] +param( + [Parameter(Mandatory = $true)] + [string]$ExecutablePath, + + [Parameter(Mandatory = $true)] + [string]$WorkingDirectory +) + +$ErrorActionPreference = 'Stop' +$taskName = 'Inventera Server' + +if (-not (Split-Path -Parent $ExecutablePath)) { + throw 'The Inventera executable path is invalid.' +} + +$action = New-ScheduledTaskAction ` + -Execute $ExecutablePath ` + -WorkingDirectory $WorkingDirectory + +$trigger = New-ScheduledTaskTrigger -AtStartup + +$settings = New-ScheduledTaskSettingsSet ` + -StartWhenAvailable ` + -RestartCount 5 ` + -RestartInterval (New-TimeSpan -Minutes 1) ` + -ExecutionTimeLimit ([TimeSpan]::Zero) ` + -MultipleInstances IgnoreNew + +$principal = New-ScheduledTaskPrincipal ` + -UserId 'SYSTEM' ` + -LogonType ServiceAccount ` + -RunLevel Highest + +$task = New-ScheduledTask ` + -Action $action ` + -Trigger $trigger ` + -Settings $settings ` + -Principal $principal ` + -Description 'Starts the Inventera web server when Windows starts.' + +Register-ScheduledTask ` + -TaskName $taskName ` + -InputObject $task ` + -Force | Out-Null