Вопрос Как избежать длительного запуска инсталлятора при его большом объеме

zettend

Старожил
Здравствуйте!
Обратил внимание на то, что инсталлятор состоящий из 1 exe файла большого объема запускается как то слишком долго.

Возможно этого как-то избежать или перевести этот процесс(я как понял распаковку в temp) на момент инициализации установки?

Пример такого инсталлятора https://source-v34.ru/
 

Krinkels

Он где то тут
Администратор
Мне в каком то скрипте попадалось окошко отображающее процесс извлечения файлов во временную папку при инициализации установщика. Можно попробовать реализовать нечто подобное
 

vint56

Ветеран
Проверенный
Временные файлы должны быть первыми а потом ты файлы которые сжимаеш средствами inno setup
 

zettend

Старожил
@vint56, а как это возможно сделать в коде? Установщик полностью чистый, собранный полностью средствами "мастера" встроенного в Inno.
 

vint56

Ветеран
Проверенный
у меня так было когда я в секций файлы когда я сжимал игру а потом временные
а правильно
[Files] с начало файлы установщика временные
Source: "Montserrat Medium.ttf"; DestDir: "{tmp}"; Flags: ignoreversion
а потом игра
Source: "Files\Montserrat SemiBold.ttf"; DestDir: "{app}"; Flags: ignoreversion
 

zettend

Старожил
@vint56, вот весь код скрипта:
code_language.pascal:
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "launcher.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{DA24FD07-CC75-41C3-AC3F-895880992954}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\My Program CS
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Counter-Strike Source\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Скорость запуска все равно безумно долгая даже с учетом супер быстрого SSD и мощного железа.

(черный экран в видео, это окно "Контроль учетных записей")
 

Krinkels

Он где то тут
Администратор
А почему бы не упаковать игру в архив? Возможно, при запуске инсталятор проверяет свою целостность, отсюда и долгий запуск
 

zettend

Старожил
@Krinkels, требуется лишь 1 файл. В общем нет возможности разбить на несколько файлов
 

Хамик

Старожил
@vint56, вот весь код скрипта:
code_language.pascal:
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "launcher.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{DA24FD07-CC75-41C3-AC3F-895880992954}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\My Program CS
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Counter-Strike Source\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Скорость запуска все равно безумно долгая даже с учетом супер быстрого SSD и мощного железа.

(черный экран в видео, это окно "Контроль учетных записей")
Если это весь код, то проблема в системе. Что-то приостанавливает запуск инсталлятора.
 

Andreo Fadio

Старожил
Такое было еще и 5 лет назад, на разных ПК, у разных людей.
проверяется целостность файла, на предмет работоспособности при старте, а потом уже извлечение временных файлов. Проверка антивирусом, если он включен.
А на современных системах еще и SmartScreen отрабатывает.
А если ПК не шибко сильный и скоростной, то обработка еще дольше.
 
Последнее редактирование:

zettend

Старожил
@Andreo Fadio,
  • Никакого антивируса в системе нет
  • Windows Defender отключен и вырезан
  • Smart Screen отключен для любого типа файлов
Тестировал на 2х пк и на двух системах
  • Windows 11 Pro for Workstation - Core i7-12700K
  • Windows 10 Pro for Workstation - Intel Xeon Gold 6130
  • Linux(Wine) - Intel Xeon Gold 6130
На всех системах стоит SSD со скоростями выше, чем 3500 Мб/с

@Хамик, https://disk.yandex.ru/d/RCxk3gBLccJdUA
 

Хамик

Старожил
@Andreo Fadio,
  • Никакого антивируса в системе нет
  • Windows Defender отключен и вырезан
  • Smart Screen отключен для любого типа файлов
Тестировал на 2х пк и на двух системах
  • Windows 11 Pro for Workstation - Core i7-12700K
  • Windows 10 Pro for Workstation - Intel Xeon Gold 6130
  • Linux(Wine) - Intel Xeon Gold 6130
На всех системах стоит SSD со скоростями выше, чем 3500 Мб/с

@Хамик, https://disk.yandex.ru/d/RCxk3gBLccJdUA
Как и ожидалось, никаких зависаний Тест
 

zettend

Старожил
@Хамик, тогда вопрос... Почему это может происходить у меня даже при запуске из под Linux?
 

ZVSRus

Участник
Почему это может происходить у меня даже при запуске из под Linux?
Опишу алгоритм своих действий.
Запустил ваш установщик demo installer, открывался минут 10, плюнул (нервы не выдержали), вырубил (на чистой виртуалке открывается за 1 сикунду).
Распаковал распаковщиком ваш demo installer и подсунул в секцию [Files] все файлы россыпью, компиляция прошла вместо 58 минут (вместо одной папки скопом) за 22 минуты (файлы россыпью), запуск инсталла за пару секунд.
Выводы делайте сами.

PS: Конечно я понимаю что прописывать 44620 строк в ручную это геморрой, но всё же старайтесь в секции [Files] делать так чтобы инсталл при компиляции и при запуске читал секцию [Files] быстрее.

[Files].iss
 

audiofeel

Старожил
пробуйте так
"Flags: sortfilesbyextension sortfilesbyname" - это сортирует по имени и по расширению (ускоряет компресс, наверное должен ускорить и распаковку)
"Flags: nocompression" - это для файлов которые плохо жмутся, скорее всего медиа (то же ускорит компресс ну и на не сжатый файл ни чего не тратится, время и тд..)
"Flags: solidbreak" - цитата " Если включено непрерывное сжатие, этот флаг указывает компилятору завершить текущий поток сжатия и начинать новый перед сжатием файла(ов) источника. Это позволяет инсталлятору быстро найти файл, не разархивируя вначале все остальные файлы перед ним. Может быть полезно в большом, многокомпонентном инсталляторе, если Вы считаете, что на декомпрессию файлов не выбранных компонент тратится слишком много времени."
у меня ваш файл открылся за 9секунд (считаю что норм). антивируса нет, смартскрин убит, ну и применен вот этот твик, то есть при скачивании из инета галочки что файл получен с другого компа нет
Код:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Associations]
"DefaultFileTypeRisk"=dword:00006152

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments]
"HideZoneInfoOnProperties"=dword:00000001
"SaveZoneInformation"=dword:00000002

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Associations]
"LowRiskFileTypes"=".pac;.zip;.rar;.nfo;.txt;.exe;.bat;.com;.cmd;.reg;.msi;.htm;.html;.gif;.bmp;.jpg;.avi;.mpg;.mpeg;.mov;.mp3;.m3u;.wav;.png;.7z;.iso;.flac;.ape;.rtf;.wmv;.ts;.ico;.flv;.psd;.ogg;.pdf;.torrent;.mp4"
 
Последнее редактирование:
Сверху