Beta_cartrigesg_bd Beta v0.12

This commit is contained in:
2026-08-05 16:15:35 +03:00
parent e6b8538679
commit 15d5e780ee
10 changed files with 365 additions and 8 deletions

View File

@@ -2,6 +2,7 @@
#define MyAppVersion "2.0"
#define MyAppPublisher "Inv_web"
#define MyAppExeName "Inv_web Client.exe"
#define RustDeskInstaller "installer\prerequisites\rustdesk.exe"
[Setup]
AppId={{6F0D1694-CACE-4F7D-97A2-BB01C240775B}
@@ -10,7 +11,7 @@ AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={localappdata}\Programs\{#MyAppName}
DefaultGroupName={#MyAppName}
PrivilegesRequired=lowest
PrivilegesRequired=admin
OutputDir=dist
OutputBaseFilename=Inv_web_Client_Setup
SetupIconFile=picture\ICON\icon_client.ico
@@ -31,6 +32,8 @@ Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#RustDeskInstaller}"; DestDir: "{tmp}"; DestName: "rustdesk-installer.exe"; Flags: deleteafterinstall noencryption; Check: ShouldInstallRustDesk
Source: "installer\configure_rustdesk.ps1"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption; Check: ShouldInstallRustDesk
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
@@ -42,12 +45,56 @@ Filename: "{app}\{#MyAppExeName}"; Description: "Запустить {#MyAppName}
[Code]
var
InstallModePage: TInputOptionWizardPage;
RustDeskServerPage: TInputQueryWizardPage;
RustDeskPasswordPage: TInputQueryWizardPage;
ConnectionPage: TInputQueryWizardPage;
function IsManualRustDeskMode: Boolean;
begin
Result := InstallModePage.SelectedValueIndex = 1;
end;
function ShouldInstallRustDesk: Boolean;
begin
Result := InstallModePage.SelectedValueIndex <> 2;
end;
procedure InitializeWizard;
begin
ConnectionPage := CreateInputQueryPage(
InstallModePage := CreateInputOptionPage(
wpWelcome,
'Режим установки',
'Выберите состав установки',
'Клиент Inv_web устанавливается во всех режимах.',
True,
False
);
InstallModePage.Add('Автоматический режим с RustDesk');
InstallModePage.Add('Ручной режим с сервером RustDesk');
InstallModePage.Add('Установка без RustDesk (удалённого доступа)');
InstallModePage.SelectedValueIndex := 0;
RustDeskServerPage := CreateInputQueryPage(
InstallModePage.ID,
'Сервер RustDesk',
'Укажите параметры собственного сервера',
'Введите адреса серверов RustDesk и публичный ключ сервера.'
);
RustDeskServerPage.Add('Сервер ID:', False);
RustDeskServerPage.Add('Ретранслятор:', False);
RustDeskServerPage.Add('Key:', False);
RustDeskPasswordPage := CreateInputQueryPage(
RustDeskServerPage.ID,
'Фиксированный пароль RustDesk',
'Настройте постоянный пароль удалённого доступа',
'Оставьте поле пустым, чтобы пропустить этот шаг и не задавать пароль.'
);
RustDeskPasswordPage.Add('Фиксированный пароль:', True);
ConnectionPage := CreateInputQueryPage(
RustDeskPasswordPage.ID,
'Подключение к серверу',
'Укажите параметры подключения клиента',
'Введите адрес сервера и токен. Эти данные будут сохранены в профиле текущего пользователя.'
@@ -56,9 +103,77 @@ begin
ConnectionPage.Add('Токен:', True);
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result := False;
if (PageID = RustDeskServerPage.ID) and
(not IsManualRustDeskMode) then
begin
Result := True;
Exit;
end;
if (PageID = RustDeskPasswordPage.ID) and
(not ShouldInstallRustDesk) then
Result := True;
end;
function ContainsUnsafeCommandLineCharacters(const Value: String): Boolean;
begin
Result :=
(Pos('"', Value) > 0) or
(Pos(#13, Value) > 0) or
(Pos(#10, Value) > 0);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID = RustDeskServerPage.ID then
begin
if Trim(RustDeskServerPage.Values[0]) = '' then
begin
MsgBox('Укажите сервер ID RustDesk.', mbError, MB_OK);
Result := False;
Exit;
end;
if Trim(RustDeskServerPage.Values[1]) = '' then
begin
MsgBox('Укажите ретранслятор RustDesk.', mbError, MB_OK);
Result := False;
Exit;
end;
if Trim(RustDeskServerPage.Values[2]) = '' then
begin
MsgBox('Укажите публичный Key сервера RustDesk.', mbError, MB_OK);
Result := False;
Exit;
end;
if ContainsUnsafeCommandLineCharacters(RustDeskServerPage.Values[0]) or
ContainsUnsafeCommandLineCharacters(RustDeskServerPage.Values[1]) or
ContainsUnsafeCommandLineCharacters(RustDeskServerPage.Values[2]) then
begin
MsgBox('Параметры RustDesk не должны содержать кавычки или переносы строк.', mbError, MB_OK);
Result := False;
Exit;
end;
end;
if CurPageID = RustDeskPasswordPage.ID then
begin
if ContainsUnsafeCommandLineCharacters(RustDeskPasswordPage.Values[0]) then
begin
MsgBox('Пароль RustDesk не должен содержать кавычки или переносы строк.', mbError, MB_OK);
Result := False;
end;
Exit;
end;
if CurPageID <> ConnectionPage.ID then
Exit;
@@ -76,14 +191,100 @@ begin
Exit;
end;
if (Pos('"', ConnectionPage.Values[0]) > 0) or
(Pos('"', ConnectionPage.Values[1]) > 0) then
if ContainsUnsafeCommandLineCharacters(ConnectionPage.Values[0]) or
ContainsUnsafeCommandLineCharacters(ConnectionPage.Values[1]) then
begin
MsgBox('Адрес сервера и токен не должны содержать двойные кавычки.', mbError, MB_OK);
MsgBox('Адрес сервера и токен не должны содержать кавычки или переносы строк.', mbError, MB_OK);
Result := False;
end;
end;
function GetRustDeskMode(Param: String): String;
begin
if IsManualRustDeskMode then
Result := 'manual'
else
Result := 'automatic';
end;
function GetRustDeskIdServer(Param: String): String;
begin
Result := Trim(RustDeskServerPage.Values[0]);
end;
function GetRustDeskRelayServer(Param: String): String;
begin
Result := Trim(RustDeskServerPage.Values[1]);
end;
function GetRustDeskKey(Param: String): String;
begin
Result := Trim(RustDeskServerPage.Values[2]);
end;
function GetRustDeskPassword(Param: String): String;
begin
Result := RustDeskPasswordPage.Values[0];
end;
function QuoteArgument(const Value: String): String;
begin
Result := '"' + Value + '"';
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
ExitCode: Integer;
ConfigurationPath: String;
ConfigurationText: String;
PowerShellPath: String;
Parameters: String;
begin
if (CurStep <> ssPostInstall) or (not ShouldInstallRustDesk) then
Exit;
WizardForm.StatusLabel.Caption := 'Установка и настройка RustDesk...';
PowerShellPath := ExpandConstant(
'{sys}\WindowsPowerShell\v1.0\powershell.exe'
);
ConfigurationPath := ExpandConstant('{tmp}\rustdesk-options.ini');
ConfigurationText :=
'Mode=' + GetRustDeskMode('') + #13#10 +
'IdServer=' + GetRustDeskIdServer('') + #13#10 +
'RelayServer=' + GetRustDeskRelayServer('') + #13#10 +
'Key=' + GetRustDeskKey('') + #13#10 +
'Password=' + GetRustDeskPassword('') + #13#10;
if not SaveStringToFile(ConfigurationPath, ConfigurationText, False) then
RaiseException('Не удалось подготовить параметры RustDesk.');
Parameters :=
'-NoProfile -NonInteractive -ExecutionPolicy Bypass -File ' +
QuoteArgument(ExpandConstant('{tmp}\configure_rustdesk.ps1')) + ' ' +
'-InstallerPath ' +
QuoteArgument(ExpandConstant('{tmp}\rustdesk-installer.exe')) + ' ' +
'-ConfigurationPath ' + QuoteArgument(ConfigurationPath);
ExitCode := -1;
Exec(
PowerShellPath,
Parameters,
'',
SW_HIDE,
ewWaitUntilTerminated,
ExitCode
);
DeleteFile(ConfigurationPath);
if ExitCode <> 0 then
begin
RaiseException(
'Не удалось установить или настроить RustDesk. Код ошибки: ' +
IntToStr(ExitCode)
);
end;
end;
function GetServerAddress(Param: String): String;
begin
Result := Trim(ConnectionPage.Values[0]);