Показать полную графическую версию : [архив] Inno Setup .:[все вопросы]:.
RedBishep
06-05-2009, 23:54
Я бы тоже не отказался узнать на него ответ. »\
Спасибо Большое ))
посредине установке игры идёт распаковка(Extracting) »
Я бы тоже не отказался узнать на него ответ. »
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:\Languages\Russian.isl
[Files]
; 7z SFX архивы
Source: Project1.exe; DestDir: {app}; AfterInstall: Unpack(ExpandConstant('{app}\Project1.exe')); Flags: ignoreversion
Source: Project2.exe; DestDir: {app}; AfterInstall: Unpack(ExpandConstant('{app}\Project2.exe')); Flags: ignoreversion
[_Code]
var
ProgressBar: TNewProgressBar;
procedure InitializeWizard();
begin
// создаём второй прогрессбар
ProgressBar := TNewProgressBar.Create(WizardForm);
with ProgressBar do begin
Parent := WizardForm.InstallingPage;
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + 15;
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
{ указываем на сколько секций разбить прогрессбар, в данном случае у нас 2 архива, вот и делим его на 2 части }
Max := 2; //задается по количеству файлов имеющих AfterInstall: Unpack(... )
end;
end;
procedure Unpack(Name: string);
var
res: Integer;
begin
WizardForm.StatusLabel.Caption:= 'Распаковка архива, ждите...';
Exec(Name, ' -y', '', SW_HIDE, ewWaitUntilTerminated, res);
DeleteFile(Name); // удаляем архив
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position + 1; // двигаем второй прогрессбар
ProgressBar.Position := ProgressBar.Position + 1; // двигаем родной прогрессбар
WizardForm.StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
end;
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:\Languages\Russian.isl
[Files]
; 7z SFX архивы
Source: Project1.exe; DestDir: {app}; AfterInstall: Unpack(ExpandConstant('{app}\Project1.exe')); Flags: ignoreversion
Source: Project2.exe; DestDir: {app}; AfterInstall: Unpack(ExpandConstant('{app}\Project2.exe')); Flags: ignoreversion
[_Code]
procedure Unpack(Name: string);
var
res: Integer;
begin
Exec(Name, ' -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
DeleteFile(Name); // удаляем архив
end;
RedBishep
08-05-2009, 15:14
Одним сплошным файлом это сделать не получится, придётся только "бить" на части .bin. В секцию Setup добавь строки, которые выделены зелёным цветом »
Я сделал как ты сказал всё получилось,но есть одна маленькая проблема )
Когда я сделал Инсталлер он почему-то весил 5гб, хотя сама игра распакованная весила тоже 5гб
В чём может быть причина ?
Вот код может я что-то не то намудрил )))
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
AppId={{005F1D67-F860-4CEE-A7C5-020BB495A8B1}
AppName=Call Of Duty 4
AppVerName=Call Of Duty 4 MW
AppPublisher=RedBishep
DefaultDirName={pf}\Call Of Duty 4
DefaultGroupName=Call Of Duty 4
AllowNoIcons=yes
OutputDir=C:\Documents and Settings\Кнопка\Рабочий стол
OutputBaseFilename=setup
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "D:\Games\COD4\Call Of Duty SP.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\COD4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\Call Of Duty 4"; Filename: "{app}\Call Of Duty SP.exe"
Name: "{group}\{cm:UninstallProgram,Call Of Duty 4}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Call Of Duty 4"; Filename: "{app}\Call Of Duty SP.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Call Of Duty 4"; Filename: "{app}\Call Of Duty SP.exe"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\Call Of Duty SP.exe"; Description: "{cm:LaunchProgram,Call Of Duty 4}"; Flags: nowait postinstall skipifsilent
Думаю, эта строка лишняя...
InternalCompressLevel=ultra
...»Но дождитесь вердикта Serega_. Сам сделал бы так как привык:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{005F1D67-F860-4CEE-A7C5-020BB495A8B1}
AppName=Call Of Duty 4
AppVerName=Call Of Duty 4 MW
AppPublisher=RedBishep
DefaultDirName={pf}\Call Of Duty 4
DefaultGroupName=Call Of Duty 4
AllowNoIcons=yes
OutputDir=C:\Documents and Settings\Кнопка\Рабочий стол
OutputBaseFilename=Call of Duty IV
Compression=lzma/ultra
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
ReserveBytes=0
SolidCompression=yes
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "D:\Games\COD4\Call Of Duty SP.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\COD4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\Call Of Duty 4"; Filename: "{app}\Call Of Duty SP.exe"
Name: "{group}\{cm:UninstallProgram,Call Of Duty 4}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Call Of Duty 4"; Filename: "{app}\Call Of Duty SP.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Call Of Duty 4"; Filename: "{app}\Call Of Duty SP.exe"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\Call Of Duty SP.exe"; Description: "{cm:LaunchProgram,Call Of Duty 4}"; Flags: nowait postinstall skipifsilent
Отличий нет, но я не думаю, что игра может быть сжата лучше и меньше 5 ГБ. У неё трудносжимаемые файлы. 5 ГБ это хорошо, хотя если бы сжалось на 600-700 МБ можно было бы втулить на один DVD диск 4.5. Здесь - Комментарий 10 (http://www.forum.oszone.net/post-1029209.html#post1029209) я подсчитывал на сколько запакованных ГБ идёт выигрыш...Выигрыш составил на запакованные 2 ГБ -> 80 МБ »В вашем случае, выигрыш должен быть, видимо около 200 МБ.
BlackSelf
08-05-2009, 16:43
RedBishep, попробуйте заменить соответствующие строки на эти:
Compression=lzma/ultra64
InternalCompressLevel=ultra64
попробуйте заменить соответствующие строки на эти:
Compression=lzma/ultra64
InternalCompressLevel=ultra64 »Не думаю, что это даст ощутимый прирост.
BlackSelf
08-05-2009, 18:31
Drongo, просто предложил.
RedBishep, если прироста нет, то посмотри, что в игре за файлы. Может тебе понизать битрейт у видео. Или, если там есть паки, распаковать их, сжать фриарком, а во время установки распаковать архивы и засунуть обратно в пак.
В своё время репак на CoD 4 MW делал cdman. Но он там ничего не пережимал (в плане видео и звука), но время установки было больше часа. Обычно он пользуется precomp + freearc. Отталкивайся от этого.
Когда я сделал Инсталлер он почему-то весил 5гб, хотя сама игра распакованная весила тоже 5гб »Исходя из вашего скрипта, такого не может быть... В вашем скрипте есть главные строки, указывающие на сжатие:
................
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
...............Как говорят - Неверю... ;)
Думаю, эта строка лишняя »Это нужная строчка... т.е. значение по умолчанию - normal. Хотя в справке:
Здесь указывается уровень LZMA сжатия. Нет смысла менять его со значения по умолчанию. Здесь мы задаём сжатие не normal, а ultra, что жмёт гороздо лучше... ;)
попробуйте заменить соответствующие строки на эти: »Всё правильно, сжатие лучше, но и памяти ест больше... у меня при больших сборках выскакивает ошибка, что не хватает памяти, а у меня компьютер не такой уж и слабый... :)
...
Compression=lzma/ultra
...Тоесть если мой скрипт будет содержать только одну строку вместо
Compression=lzma/ultra
InternalCompressLevel=ultraТо формально получается так:
Compression=lzma/ultra
InternalCompressLevel=normalТак?
Drongo, прежде всего извиняюсь, за не совсем исчерпывающий и не точный ответ...
InternalCompressLevel - мы задаём уровень сжатия, т.е. если указано просто:
Compression=lzmaесли не указать InternalCompressLevel=ultra, то по умолчанию, будет InternalCompressLevel=normal
Это всё можно указать и в одной строке, т.е.:
Compression=lzma/ultraмы сразу указываем сжатие и уровень его, хотя использование при этом строки InternalCompressLevel, не является ошибкой, а получается своего рода дубль...
P.S.
Всё выше сказанное, это теория, хотя в сборках, я всегда использую связку:
................
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
...............и обратил внимание, что при использовании дополнительной строки InternalCompressLevel=ultra, не просто дублирует, а улучшает сжатие, т.е. размер получается немного меньше... из-за чего, не знаю...
при использовании дополнительной строки InternalCompressLevel=ultra, не просто дублирует, а улучшает сжатие, т.е. размер получается немного меньше... »Понял, спасибо за детальный ответ, я раньше использовал одну строку. Учту на будущее совет. :)
Drongo, я забыл добавить ИМХО, т.е. это не является руководством, так сказать к употреблению. Это только мои выводы... ;)
................
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
...............
При таком раскладе, не только лутше зжимает, но и сокращается время компиляции дистрибутива, и установки.
Кстати у себя в разных скриптах нашел что функция SolidCompression может иметь значения
............................
SolidCompression=yes
SolidCompression=no
SolidCompression=true
SolidCompression=false
............................
кто знает в чем разница в справке про эти значения ваще ни слова не сказано?
Кстати у себя в разных скриптах нашел что функция SolidCompression может иметь значения »Прежде всего:
Возможные значения:yes or no
Значение по умолчанию:no
Описание:
При значении yes включается уплотненное сжатие. Результат такого сжатия будет лучше, особенно если инсталлятор содержит файлы одного типа и эти файлы сгруппированы в секции [Files]. Убедитесь, что Compression=lzma или Compression=bzip, т.к. берущийся по умолчанию zip не позволяет выгодно использовать уплотненное сжатие (потому что работает с меньшими блоками).
Неудобство использования уплотненного сжатия в том, что так как все файлы сжаты единым потоком, инсталлятор не может беспорядочно обращаться к любому из файлов. Это может тормозить работу. Если определенный файл не будет устанавливаться в систему пользователя, данные все равно придется декомпрессировать (в память) для того, чтобы инсталлятор получил доступ к следующему файлу. И если, допустим, в процессе декомпрессии возникнет ошибка и пользователь нажмет Retry, инсталлятор не сможет обратиться в файлу, в котором возникла ошибка, потому что все файлы сжаты в один файл, и придется производить повторную попытку с нуля. Если включено разбиение на диски, пользователь должен будет снова ставить первый диск.
В общем, уплотненное сжатие не рекомендуется применять к большим по размеру инсталляторам (скажем, больше 100 MB) или если используется разбиение на диски. Эта директива служит для того, чтобы при скачивании из Internet маленьких приложений экономилось время.
Из этого понятно, что SolidCompression=yes/no - противоречит изначально само себе, т.е. это из разряда нельзя казнить помиловать... Человеку свойственно ошибаться, а компьютер помогает ему это делать ещё быстрее... Это строка ошибочна, т.е. скорей всего срабатывает последний ключ no...
SolidCompression=true - это то же самое, что SolidCompression=yes;
SolidCompression=false - это то же самое, что SolidCompression=no...
Это строка котигорически не правильная, т.е. скорей всего сробатывает последний ключь no... »
Serega_, я просто так написал, знаю что может быть только yes или no. Просто хотелось узнать для чего нужны другие параметры, в принципе я так и думал что это вроде альтернативных вариантов, и изменений никаких не происходит при замене
SolidCompression=yes на SolidCompression=true
SolidCompression=no на SolidCompression=false
tem000, я изначально написал, затем подкорректировал, свою резкость и безграмотность… ;)
я просто так написал »И совершенно правильно сделали :up:, ведь не для всех понятно, как на самом деле правильно должно быть... ;)
А вообще, я обратил внимание на то, что стало появляться всё больше безграмотных скриптов, т.е. кто-то изначально сделал ошибку, а затем как ком всё вокруг нагромоздили и попытались объединить с другим…
Поэтому и необходимо рассказывать, как сделать правильно, указав на возможные ошибки...
Krekerpro
11-05-2009, 12:09
Доброго времени суток,очень нужна помощь,мне надо что бы после разархивирования,архив удалялся автоматически
[Files]
Source: D:\Games\123\SUPPORT\TOOLS\TOOLS.exe; DestDir: {app}; Flags: ignoreversion external deleteafterinstall
[Run]
Filename: {app}\SUPPORT\TOOLS\TOOLS.exe; WorkingDir: {app}; Parameters: -x archive.7z -y -o; StatusMsg: Идет распаковка архива...
мне надо что бы после разархивирования,архив удалялся автоматически »Судя по вашему примеру, он у вас удаляется автоматически, о чём свидетельствует флаг deleteafterinstall
deleteafterinstall
Указывает инсталлятору устанавливать файл как обычно, но удалять его после завершения (или прерывания) установки. Это может быть полезно, когда извлекаемые временные файлы нужны программе для выполнения в секции [Run] скрипта.
Этот флаг не удалит файл, существующий до начала установки, после этой установки.
P.S.
Заметил у вас ошибку:
Вы пишите путь D:\Games\123\SUPPORT\TOOLS\TOOLS.exe, а во флагах пишете external, что говорит инсталлятору о том, что файл внешний, т.е. инсталлятор будет работать, только у вас на компьютере.
Нужно: удалить флаг external или путь написать {src}\TOOLS.exe и положить архив рядом с инсталлятором...
Krekerpro
11-05-2009, 18:53
Serega_,
Что токо не пробовал,всё равно не удаляется :(
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC