Помогите, пожалуйста, с автоматизацией процесса установки - одну кнопку всего надо нажать автоматически!

Александр85

Новичок
Здравствуйте!
Помогите, пожалуйста, с автоматизацией процесса установки - одну кнопку всего надо нажать автоматически!
Проверьте, пожалуйста, мой скрипт, все что нужно это чтобы экзешник был зашифрован и пароль вводился автоматически, у меня проблема, никак не получается нажать кнопку Next автоматически, пароль уже сам вводится, единственное, что осталось это нажать кнопку Next.
Нужно чтобы никаких действий от пользователя не требовалось вообще! Все окна скрыты! Пользователь запустил экзешник и на выходе получил автоматический запуск скрипта Power Shell, все остальные промежуточные этапы его не должны касаться!
Конвертеры ps1 в exe не подходят, т.к. скрипт Power Shell не единственный, он завязан на огромной структуре файлов, папок и подпапок.

Исправьте, пожалуйста скрипт:

Код:
[Setup]
AppName=Test
AppVersion=1.0
AppPublisher=Test
DefaultDirName={tmp}
DisableDirPage=yes
OutputDir=Output
OutputBaseFilename=Test_1.0
Encryption=yes
Password=Test
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableReadyMemo=yes
DisableFinishedPage=yes
DisableStartupPrompt=yes
ShowLanguageDialog=no
Compression=zip
Uninstallable=no
AllowNoIcons=yes
CreateAppDir=no
VersionInfoCompany=Test
VersionInfoDescription=Test
VersionInfoProductName=Test
VersionInfoProductVersion=1.0.0.0
VersionInfoVersion=1.0.0.0
VersionInfoTextVersion=1.0
VersionInfoCopyright=2026 Test
SetupIconFile=H:\Test\icon.ico
PrivilegesRequired=admin

[Files]
Source: "H:\Test\*"; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Code]
var
  PasswordEntered: Boolean;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpPassword then
  begin
    if WizardForm.PasswordEdit <> nil then
    begin
      WizardForm.PasswordEdit.Text := 'Test';
      PasswordEntered := False;
    end;
  end;
 
  if (CurPageID > wpPassword) and (not PasswordEntered) then
  begin
    PasswordEntered := True;
    WizardForm.Left := -5000;
    WizardForm.Top := -5000;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
  FullPath: String;
begin
  if CurStep = ssPostInstall then
  begin
    FullPath := ExpandConstant('{tmp}') + '\Run.ps1';
 
    if FileExists(FullPath) then
    begin
      Exec('powershell.exe', '-NoProfile -ExecutionPolicy Bypass -File "' + FullPath + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
    end
    else
    begin
      MsgBox('ERROR: Run.ps1 not found!' + #13#10 + 'Path: ' + FullPath, mbError, MB_OK);
    end;
  end;
end;

Да, суть использования Инно в моем случае примитивна, как SFX-архив нужно чтобы Инно СКРЫТО распаковал все файлы, (а их очень много), во временную папку и потом запустил скрипт. Power Shell с правами Админа! Сам скрипт уже требует права Админа и проверяет, но так на всякий случай, если не будет избыточно.

Почему я тогда не использую SFX-архив? Потому что на него очень много ложных срабатываний антиврусов-параноиков - на Инно намного меньше + шифроание и пароль еще спасают!

Если есть иные варианты реализации, то только буду рад, главное чтобы скрипт работал и на версии 5x
 
Последнее редактирование:
На нужную страницу прилепите
code_language.pascal:
WizardForm.NextButton.OnClick(WizardForm.NextButton);
там всего одну страницу надо пропустить страницу с вводом пароля! Не хочет он ее пропускать, пароль уже введен автоматически его вводить не надо и установщик ждет когда вручную кликнешь по кнопке Далее. Проверьте весь, мой скрип, пожалуйста!
 
как то так...

code_language.pascal:
[Setup]
AppName=Silent
AppVersion=1.0
CreateAppDir=false
DisableWelcomePage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
Uninstallable=no
CreateUninstallRegKey=no

[Code]
type
  HINSTANCE = THandle;

function ShellExecute(hwnd: HWND; lpOperation: string; lpFile: string;
lpParameters: string; lpDirectory: string; nShowCmd: Integer): HINSTANCE;
  external 'ShellExecuteW@shell32.dll stdcall';

function InitializeSetup: Boolean;
begin
  Result:= WizardSilent;
  if not Result then
  begin
    if ShellExecute(0, '', ExpandConstant('{srcexe}'), '/VERYSILENT', '', SW_HIDE) <= 32 then
      Result:= True;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrCode: Integer;
begin

if CurStep = ssInstall then
  begin
     // что то тут делаем
  end;
end;
 
там всего одну страницу надо пропустить страницу с вводом пароля! Не хочет он ее пропускать, пароль уже введен автоматически его вводить не надо и установщик ждет когда вручную кликнешь по кнопке Далее. Проверьте весь, мой скрип, пожалуйста!
Вы не можете вставить одну строку?
code_language.pascal:
[Setup]
AppName=Test
AppVersion=1.0
AppPublisher=Test
DefaultDirName={tmp}
DisableDirPage=yes
OutputDir=Output
OutputBaseFilename=Test_1.0
Encryption=yes
Password=Test
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableReadyMemo=yes
DisableFinishedPage=yes
DisableStartupPrompt=yes
ShowLanguageDialog=no
Compression=zip
Uninstallable=no
AllowNoIcons=yes
CreateAppDir=no
VersionInfoCompany=Test
VersionInfoDescription=Test
VersionInfoProductName=Test
VersionInfoProductVersion=1.0.0.0
VersionInfoVersion=1.0.0.0
VersionInfoTextVersion=1.0
VersionInfoCopyright=2026 Test
SetupIconFile=H:\Test\icon.ico
PrivilegesRequired=admin

[Files]
Source: "H:\Test\*"; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Code]
var
  PasswordEntered: Boolean;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpPassword then
  begin
    if WizardForm.PasswordEdit <> nil then
    begin
      WizardForm.PasswordEdit.Text := 'Test';
      PasswordEntered := False;
    end;
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
  end;

  if (CurPageID > wpPassword) and (not PasswordEntered) then
  begin
    PasswordEntered := True;
    WizardForm.Left := -5000;
    WizardForm.Top := -5000;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
  FullPath: String;
begin
  if CurStep = ssPostInstall then
  begin
    FullPath := ExpandConstant('{tmp}') + '\Run.ps1';

    if FileExists(FullPath) then
    begin
      Exec('powershell.exe', '-NoProfile -ExecutionPolicy Bypass -File "' + FullPath + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
    end
    else
    begin
      MsgBox('ERROR: Run.ps1 not found!' + #13#10 + 'Path: ' + FullPath, mbError, MB_OK);
    end;
  end;
end;
 
Вы не можете вставить одну строку?
code_language.pascal:
[Setup]
AppName=Test
AppVersion=1.0
AppPublisher=Test
DefaultDirName={tmp}
DisableDirPage=yes
OutputDir=Output
OutputBaseFilename=Test_1.0
Encryption=yes
Password=Test
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableReadyMemo=yes
DisableFinishedPage=yes
DisableStartupPrompt=yes
ShowLanguageDialog=no
Compression=zip
Uninstallable=no
AllowNoIcons=yes
CreateAppDir=no
VersionInfoCompany=Test
VersionInfoDescription=Test
VersionInfoProductName=Test
VersionInfoProductVersion=1.0.0.0
VersionInfoVersion=1.0.0.0
VersionInfoTextVersion=1.0
VersionInfoCopyright=2026 Test
SetupIconFile=H:\Test\icon.ico
PrivilegesRequired=admin

[Files]
Source: "H:\Test\*"; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Code]
var
  PasswordEntered: Boolean;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpPassword then
  begin
    if WizardForm.PasswordEdit <> nil then
    begin
      WizardForm.PasswordEdit.Text := 'Test';
      PasswordEntered := False;
    end;
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
  end;

  if (CurPageID > wpPassword) and (not PasswordEntered) then
  begin
    PasswordEntered := True;
    WizardForm.Left := -5000;
    WizardForm.Top := -5000;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
  FullPath: String;
begin
  if CurStep = ssPostInstall then
  begin
    FullPath := ExpandConstant('{tmp}') + '\Run.ps1';

    if FileExists(FullPath) then
    begin
      Exec('powershell.exe', '-NoProfile -ExecutionPolicy Bypass -File "' + FullPath + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
    end
    else
    begin
      MsgBox('ERROR: Run.ps1 not found!' + #13#10 + 'Path: ' + FullPath, mbError, MB_OK);
    end;
  end;
end;
Уже пробовал как на 5, 6 и даже 7-й версии! После запуска экзешник зависает намертво ничего нет, никаких ошибок. Видимо зависает, как раз на этапе ввода пароля, но кнопку нажать не может! Проверьте, пожалуйста, сами скомпилируйте и запустите! У меня не работает
 
Назад
Сверху