Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Serega0675
Дата сообщения: 17.12.2008 22:10
LordVeider

Цитата:
Нужно список компонентов сделать таким
Я уже задавал такой вопрос. Ещё раз скажу, спасибо Victor_Dobrov, выручил и объяснил - ответ.
И потом в скрипте, в секцию [Setup], достаточно поставить ComponentsListTVStyle=true и всё, будет такой список компонентов...
Автор: sanmon
Дата сообщения: 18.12.2008 06:28
Пожалуйста, подскажите, как народ умудряется делать репаки игр, сжимая их ну просто нереально (например Tomb Raider UnderWorld и GTA4 c Эпидем.ру), пробовал lzma\ultra64, тот же эффект, но в другой руке. Может быть используется другой принцип, архиватор и т.п.? Кто знает?
Автор: SotM
Дата сообщения: 18.12.2008 07:50
sanmon
Разные игры сжимаются по разному. Из некоторых игр вырезаются не нужные видеоролики, звук и т.д. Некоторые игры при распаковке конвертируют mp3/ogg в wav звуки необходимые для самой игры.
А так, большей частью всё сжато этим самым lzma\ultra64. Тут нет никакой мистики и волшебства.

Автор: omals
Дата сообщения: 18.12.2008 10:13
Artem_Butenko

Цитата:
... Постараюсь еще детальнее описать суть проблемы...

если я правильно понял суть проблемы, то возможно стоит попробовать вот так:

[_Setup]
DefaultDirName={code:MyDirName}

[_Code]
var
IsSkipDirPage: boolean; // глобальная переменна. значение которой будет True, если страницу выбора директории нужно пропустить.

function MyDirName(S:String): String;
var
    InsPath: String; // путь установки
er: boolean;    
myFile:String;
begin
IsSkipDirPage := False; // по умолчание предполагаем, что страница выбора директории будет
InsPath:=ExpandConstant('{pf}\Моя компания\Мой продукт'); //если ключа и нужного файла не найдем, то ставим какой-то путь по умолчаний

er := RegQueryStringValue(HKLM, '\мой ключ в реестре\', 'InstallPath', InsPath);
if er and InsPath<>'' then //если ключ существует и там что-то записано
begin
IsSkipDirPage:=True; // запомним, что станицу выбора директории нужно пропустить
// будем ставить по старому пути , который сейчас в InsPath
end
else
begin
myFile := ExpandConstant('{src}\myfile.md5'); // тот файл шо должен лежать рядом с инсталятором
if (FileExists(myFile)) and (GetMD5OfFile(myFile)='нужное мне значени MD5') then
begin
IsSkipDirPage:=True; // запомним, что станицу выбора директории нужно пропустить
InsPath := ExpandConstant('{src}'); // будем ставить в ту же папку где находится инсталятор
end;
end;
Result := InsPath;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID=wpSelectDir) and IsSkipDirPage then //если страница выбора директории и ее нужно пропустить
WizardForm.NextButton.OnClick(WizardForm.NextButton); // пропустили -- типа нажали Next
end;
Автор: sanmon
Дата сообщения: 18.12.2008 11:30
SotM, спасибо за ответ, просто пробовал жать гта4 - 12 с лишним гб, а репак (написано, что ничего не выкинуто из игры) 8 гб... Как же так? ресурсы, насколько я знаю, пока невынимаемые для конвертирования. репачил некто cdman.
Автор: EagleSH
Дата сообщения: 18.12.2008 11:59
sanmon
в том репаке тв ролик один выкинут.
Автор: Zloy_Gelud
Дата сообщения: 18.12.2008 12:53
sanmon
Tomb Raider: UnderWorld. Используется для сжатия FreeArc 0.50 alpha + Precomp v0.3.8 (по крайне мере у меня так). Такая смесь довольно круто сжимает ресурсы, но необходимо и больше места на диске для распаковки игры в Temp.
Автор: Artem_Butenko
Дата сообщения: 18.12.2008 13:51
omals -- спасибо за содействие, сейчас я в отъезде, компьютера под рукой нет. Как вернусь, обязательно проверю и отпишусь.
Автор: GameOver
Дата сообщения: 18.12.2008 16:01
Есть файл лицензии, который в коде прописан так - "LicenseFile=E:\Games\readme.txt", но нужен если добавить выбор языка, который выглядит вот так:

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"

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

Второй вопрос аналогичен первому, только в отношении картинки, которая в коде прописана так - "WizardImageFile=E:\Games\pic.bmp". Задача аналогичная первой - чтобы при выборе языка в инсталяторе менялась и картинка соотвествующе.

Есть идеи как это сделать?


Добавлено:

Цитата:
Tomb Raider: UnderWorld. Используется для сжатия FreeArc 0.50 alpha + Precomp v0.3.8 (по крайне мере у меня так). Такая смесь довольно круто сжимает ресурсы, но необходимо и больше места на диске для распаковки игры в Temp.


Не подскажешь как сие можно настроить и опробовать в инсталяторе, хочется сравнить методы сжатия. Заранее благодарен за помощь!
Автор: sanmon
Дата сообщения: 18.12.2008 16:13
EagleSH и Zloy_Gelud, спасибо большое, что откликнулись! Про FreeArc и Precomp буду копать. Может еще подскажете, каким образом загрузить все ядра по полной (но чего-то я сомневаюсь в возможностях таких), а то всегда при компиляции только 40-60% процентов, можно сказать, что в два раза дольше пакуется.
Автор: noiseless
Дата сообщения: 18.12.2008 16:59
GameOver
Попробуй так:

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "E:\Games\readme_rus.txt"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"; LicenseFile: "E:\Games\readme.txt"
Автор: Artem_Butenko
Дата сообщения: 18.12.2008 18:00
Ребята -- заранее извиняюсь за немного сумбурный вопрос. Просто хотел узнать, какие еще инсталляторы и архиваторы (SFX-модули), кроме Inno Setup, способны запустить *.exe файл, если расширение изменено на *.ex_? Наверное вопрос немного странный, но порой практически значимый!
Автор: Zloy_Gelud
Дата сообщения: 18.12.2008 18:14
Artem_Butenko
Модифицированный 7z SFX модуль это может. Правда сначала тебе придется хорошенько разобраться с конфигом для него.
Ru-Board | Офф. форум | Офф. сайт


Добавлено:
[more=Пример конфига для модуля];!@Install@!UTF-8!
;Абсолютно тихая установка
;Переименовываем файл
RunProgram="hidcon:cmd /c rename file.ex_ file.exe"
;Запускаем его
RunProgram="file.exe"
GUIMode="2"
;!@InstallEnd@![/more]
Автор: GameOver
Дата сообщения: 18.12.2008 19:13
noiseless

Ага, уже доперло, посидел покопался, опробовал несколько вариантов и заработало, но за совет ОГРОМНОЕ СПАСИБО.

А как сие сделать для инсталяционной картинки, которая задается вот это строчкой в разделе Setup -
"WizardImageFile=E:\Games\pic.bmp".
Нужно чтобы, если я выбрал инсталировать на английском языке картинка была на английская, а если на русском инсталировать, то картинка отображается русская.
Есть идеи как это реализовать?

Автор: SotM
Дата сообщения: 18.12.2008 20:27
GameOver

Цитата:
А как сие сделать для инсталяционной картинки, которая задается вот это строчкой в разделе Setup - "WizardImageFile=E:\Games\pic.bmp".

"Стандартными" средствами нельзя, т.к. это строчка задается для компилятора. Эта картинка добавляется во время компиляции.
Думаю можно как нить реализовать через секцию кода. Если посидеть и подумать... например эти картинки добавлять через секцию Files, а потом отобразить одну из картинок прямо на форме. Вроде бы через WinAPI можно сделать. Может кто-то быстрее ответ состряпает?
Автор: GameOver
Дата сообщения: 18.12.2008 20:32
SotM - моего знания инносетапа не хватит, чтобы такое сделать, может есть у кого готовое решение или поможет написать так, чтобы работало?
Автор: cdman67
Дата сообщения: 18.12.2008 20:44

Цитата:
Как же так? ресурсы, насколько я знаю, пока невынимаемые для конвертирования. репачил некто cdman.

То, что ресурсы невынимаемые - это не помеха, если в игровых архивах авторы юзают zLib. Precomp тебе поможет.


Цитата:
Разные игры сжимаются по разному. Из некоторых игр вырезаются не нужные видеоролики, звук и т.д. Некоторые игры при распаковке конвертируют mp3/ogg в wav звуки необходимые для самой игры.

Так поступают рипперы, а не репакеры - а это, как говорят в Одессе - две большие разницы )))


Цитата:
А так, большей частью всё сжато этим самым lzma\ultra64. Тут нет никакой мистики и волшебства.

В большинстве современных игр ресурсы уже упакованы в архивы, поэтому и применять к ним в лоб lzma/ultra64, что мёртвому припарка - много не сожмёшь. В таких случаях помогает препроцессинг + rep в разумных пределах. А потом уж lzma/ultra64.
Автор: Serega0675
Дата сообщения: 18.12.2008 20:48
SotM, подскажите если знаете - вопрос.
Автор: Artem_Butenko
Дата сообщения: 18.12.2008 20:58
Zloy_Gelud -- большое Вам спасибо за помощь, но видимо я сам напортачил с постановкой вопроса. А именно, меня интересует, как и чем (инсталлятор или SFX-модуль архиватора) можно запустить исполнительный файл SFX-архива, если его расширение представлено в таком виде: *.ex_. При этом переименовывать расширение в стандартное для моей задачи нельзя. Запустить исполнительный файл какое бы расширение он не имел умеет Inno Setup. И похоже он в этом вопросе монополист?
Автор: sanmon
Дата сообщения: 18.12.2008 20:59

Цитата:
В таких случаях помогает препроцессинг + rep в разумных пределах. А потом уж lzma/ultra64.


cdman67, не смог бы объяснить или ссылкой на вменяемое объяснение процесса? Буду очень благодарен!
Автор: cdman67
Дата сообщения: 18.12.2008 21:07
Serega0675, через shellexec не работает ?
Автор: Serega0675
Дата сообщения: 18.12.2008 21:25
cdman67

Цитата:
через shellexec не работает ?
Дело в том, что я не разбираюсь в этом, поэтому и попросил помощи.
Автор: cdman67
Дата сообщения: 18.12.2008 21:41
Serega0675, самый простой вариант такой:

[Run]
FileName: "cmd.exe"; Parameters: "/c start YourSFXArchive.ex_"; WorkingDir: "{app}"

Да и в любом другом инсталлере так сделать можно, вызовом системных команд.
Автор: Serega0675
Дата сообщения: 18.12.2008 22:01
cdman67
Спасибо конечно, но я спрашивал совсем про другое:
Цитата:
Использую такой [more=код][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Tasks]
Name: alluser; Description: Создать иконку для всех пользователей; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive
Name: user; Description: Создать иконку только для данного пользователя; GroupDescription: {cm:AdditionalIcons}; Flags: exclusive unchecked

[Dirs]
Name: {commonprograms}\My Program; Attribs: readonly; Tasks: alluser
Name: {userprograms}\My Program; Attribs: readonly; Tasks: user

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[INI]
Filename: {commonprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconFile; String: {app}\MyProg.exe; Tasks: alluser
Filename: {commonprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconIndex; String: 0; Tasks: alluser
Filename: {userprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconFile; String: {app}\MyProg.exe; Tasks: user
Filename: {userprograms}\My Program\Desktop.ini; Section: .ShellClassInfo; Key: IconIndex; String: 0; Tasks: user

[UninstallDelete]
Type: files; Name: {commonprograms}\My Program\Desktop.ini; Tasks: alluser
Type: files; Name: {userprograms}\My Program\Desktop.ini; Tasks: user

[Icons]
Name: {commonprograms}\My Program\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: alluser
Name: {userprograms}\My Program\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: user

[_Code]
var
ErrorCode: Integer;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{commonprograms}\My Program\Desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
[/more], вопрос: как на файл поставить Attribs: hidden system, в зависимости от выбора расположения ярлыка? Понимаю, что нужно скорей всего использовать функцию IsTaskSelected, но каким образом не могу разобраться... Может, кто-нибудь поможет?

Автор: sanmon
Дата сообщения: 18.12.2008 22:09
Уважаемые гуру, подскажите, как использовать precomp? Со своим скудным английским не разобрался ((
И, если не трудно, поподробнее об этой связке:

Цитата:
В таких случаях помогает препроцессинг + rep в разумных пределах. А потом уж lzma/ultra64.
Автор: LordVeider
Дата сообщения: 18.12.2008 22:55
Serega0675, спасибо.

Открытым остаётся вопрос о дописывании параметров к ярлыку при выборе компонентов.

И ещё одна задачка появилась.
Есть список компонентов примерно такого вида:
Цитата:
Группа А
- Компонент 1
- Компонент 2
- Компонент 3
Группа Б
- Компонент 4
- Компонент 5
- Компонент 6
Группа В
- Компонент 7
- - Компонент 7.1
- - Компонент 7.2
- - Компонент 7.3
- Компонент 8
- - Компонент 8.1
- - Компонент 8.2
- Компонент 9
Нужно сделать чтобы отображалось всё именно таким деревом, но компонент 8 с подкомпонентами являлся дочерним для Компонента 2. Т.е. чтобы при снятии выбора с Компонента 2 он становился недоступен.
При этом, если Компонент 2 выбран, то Компонент 8 для установки обязателен, т.е. имеет флаг fixed, а из его подкомпонентов 8.1 и 8.2 устанавливается только один, т.е. они имеют флаги exclusive.
Как-то так...
Автор: Serega0675
Дата сообщения: 18.12.2008 23:31
LordVeider

Цитата:
Нужно сделать чтобы отображалось всё именно таким деревом
[more=так][Components]
Name: Группа А; Description: Группа А; Types: full
Name: Группа А\Компонент 1; Description: Компонент 1; Types: full custom
Name: Группа А\Компонент 2; Description: Компонент 2; Types: full custom
Name: Группа А\Компонент 2; Description: Компонент 2; Types: full custom
Name: Группа Б; Description: Группа Б; Types: full
Name: Группа Б\Компонент 4; Description: Компонент 4; Types: full custom
Name: Группа Б\Компонент 5; Description: Компонент 5; Types: full custom
Name: Группа Б\Компонент 6; Description: Компонент 6; Types: full custom
Name: Группа В; Description: Группа В; Types: full
Name: Группа В\Компонент 7; Description: Компонент 7; Types: full
Name: Группа В\Компонент 7\Компонент 7.1; Description: Компонент 7.1; Types: full custom
Name: Группа В\Компонент 7\Компонент 7.2; Description: Компонент 7.2; Types: full custom
Name: Группа В\Компонент 7\Компонент 7.3; Description: Компонент 7.3; Types: full custom
Name: Группа В\Компонент 8; Description: Компонент 8; Types: full
Name: Группа В\Компонент 8\Компонент 8.1; Description: Компонент 8.1; Types: full custom
Name: Группа В\Компонент 8\Компонент 8.2; Description: Компонент 8.2; Types: full custom
Name: Группа В\Компонент 9; Description: Компонент 9; Types: full
[/more]. Насчёт остального, надо прописывать в секции код, а тут я не силён...
Автор: LordVeider
Дата сообщения: 18.12.2008 23:42
Так то каждый может.
Надо такое отображение именно при поставленных условиях.
Мне же пока удаётся либо сделать нужную визуальную структуру, но при этом без правильных связей, либо правильные связи, но при этом компонент 8 является подкомпонентом второго. Что тоже не катит...
Автор: GameOver
Дата сообщения: 19.12.2008 01:40
Есть "WizardImageFile=E:\Games\pic.bmp", которая находится в блоке Setup, в блок Languages добавлен выбор языка при инсталяции патча, который выглядит вот так:

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"

Вопрос - как сделать так, чтобы при выборе русского языка показывалась картинка pic.bmp, а при выборе английского языка показывалась, например pic_eng.bmp.

Может кто предложить готовое решение или помощь решить эту проблему конкретными советами?
Заранее благадарен за помощь!
Автор: ExpeditorR
Дата сообщения: 19.12.2008 07:38
Обновлённая is7z.dll v1.01
В новой версии больше не нужно использовать innocallback.dll.
Добавлена поддержка пароля на архив.
Вобщем смотрите пример использования в архиве. Скачать

p.s.
Спасибо htuos за направление мыслей в нужную сторону.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.