Beta_cartrigesg_bd Beta v0.8

This commit is contained in:
2026-07-26 15:54:16 +03:00
parent 7e6927eacc
commit 1576056624
3 changed files with 108 additions and 5 deletions

View File

@@ -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
Требования:

View File

@@ -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;

View File

@@ -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