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

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

Автор: SotM
Дата сообщения: 03.05.2009 13:53
Yoldosh
Пару страниц назад я давал ссылки на утилицы конвертации звуков. Их использовать очень просто. Тут уже обсуждалось 1000 раз как запускать утилиты из командной строки.
Автор: Seup
Дата сообщения: 03.05.2009 14:00
Yoldosh
Один из способов сжать .wav, это использовать winrar, а потом при установке запустить распаковку из inno setup. WinRar сжимает wav примерно также, как если бы ты перекодировал wav во flac. Но это если ты хочешь сохранить оригинальное качество wav. А если качество звука в данном случае не столь важно, то можно сжать в mp3 или ogg, в потом запустить перекодировку. WinRar также может процентов на 10 сжать mp3. Я собственно сейщас решаю такую же проблему, как и твой вопрос. Пытаюсь разобраться с батником для ogg..
Автор: tahirg
Дата сообщения: 03.05.2009 14:14
Victor_Dobrov
чудесно, нет слов для благодарности
спасибо!
а возможно вторую хотелку сделать?
про текущий размер и реальный?
Автор: spider91
Дата сообщения: 03.05.2009 14:24
Seup
Yoldosh


ведь SotM уже дал вам ссылку на oggdec и oggenc.

без потери качества wav файлы становятся в 2 раза меньше


DeKaNszn

спасибо. буду пробовать
Автор: Victor_Dobrov
Дата сообщения: 03.05.2009 15:28
tahirg
Цитата:
а возможно вторую хотелку сделать?
про текущий размер и реальный?

Если это вопрос по компоненту, который может занимать больше места, то могу посоветовать этот дополнительный объём прописать в подсказке (смотри ComponentsDescriptions.iss из коллекции скриптов)
Автор: Seup
Дата сообщения: 03.05.2009 16:06
spider91
Все правильно, но нужно не забывать также и о скорости установки. Так, например, если небольшое кол-во wav файлов и их вес не велик, то зачем запускать дополнительно процесс перекодировки, если можно с нормальной скоростью просто распаковать с rar архива. Конечно когда пара тысяч wav файлов, тут уже приходиться выбирать, или скорость установки, или размер.
Автор: spider91
Дата сообщения: 03.05.2009 16:31
Seup

inno с lzma/ultra64 запакует их не хуже winrar'а. winrar вобще слабо жмет. лучше используй FreeArc или 7-zip x64
Автор: KurtWagner
Дата сообщения: 03.05.2009 16:47
DeKaNszn еще раз огромное спасибо.
Автор: Raf_SE
Дата сообщения: 03.05.2009 18:02
Ктонить может [more=исправить этот скрипт]
[Code]
const
NeedSize = 20; //Прописать, сколько мегабайт необходимо

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

procedure InitializeWizard();
var
Path: String;
FreeMB, TotalMB: Cardinal;
ListBox: TListBox;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Всего: ' + FloatToStr(round(TotalMB)/1000) +
'Гб - Свободно: ' + FloatToStr(round(FreeMB)/1000) + 'Гб');
end;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' MB,'#13+ 'а на выбранном Вами диске доступно только '+ IntToStr(FreeMB)+' MB', mbCriticalError, MB_OK)
Result := False;
end;
end;
end;[/more] так, чтоб к примеру при нажатии на диск F:\ (в списке винчестеров), менялся диск для установки с C:\ на F:\
[more=Как я себе это представляю] [/more]
Эта функция реализована в инсталляторе Сталкера, только там окно со [more=списком винчестеров] [/more] не очень красивое.


И заодно хотел бы спросить, можно ли сделать так, чтоб Inno жал файлы не по своим алгоритмам, а к примеру с использованием алгоритма от FreeArc?
Автор: Seup
Дата сообщения: 03.05.2009 20:24
Незнаю, может кому пригодится, вот пример скрипта игрового инсталятора, который выполняет следующие действия в таком порядке:
1 - распаковывает файлы из архива "arc", находящегося рядом с инсталятором
2 - по завершении распаковки, запускает BAT-файл и кодирует файлы OGG в WAV
3 - затем удаляет, после завершения кодирования, файлы OGG
4 - удаляет вспомогательные файлы, такие как oggdec.exe и BAT-файл, в котором прописывались звуковые файлы для кодирования
Также создает ярлыки, которые предварительно были прописаны в скрипте.

За основу была взята игра Война и Мир. В архиве игра получила размер 17мб, после распаковки и всех действий будет весить 239мб
В данном случае использовался битрейт OGG 64kbit/s, что значительно, как вы видите, сократило размер инсталятора.

Скачать и посмотреть этот скрипт в действии можно отсюда(в архиве, сам скрипт и игра):

http://narod.ru/disk/8310851000/%D0%92%D0%BE%D0%B9%D0%BD%D0%B0%20%D0%B8%20%D0%9C%D0%B8%D1%80.zip.html

Скрипт отдельно:

http://narod.ru/disk/8310951000/wap.iss.html

(Те, кто запустит игру, услышат "Скрипки" в начале каждого звукого файла. Скажу, что они появились не из-за низкого битрейта. Изначальное качество звука было не велико.)
Чтобы посмотреть BAT-файл, не запускайте "Война и Мир.exe", а просто распакуйте "WAP.exe". Имя батника "comon.bat"

По поводу внешнего вида инсталятора, скажу что он был изменен на основе скрипта, найденого в Inno Setup Scripting v5.1
Файлы для придания такого внешнего вида инсталятора здесь(некоторые страницы не сделаны, кому надо доделайте):


http://narod.ru/disk/8311707000/Installer.rar.html

Добавлено:
Забыл написать, заранее извеняюсь, если это надо было размещать не здесь. Напишите, я перемещу куда надо.
Автор: KurtWagner
Дата сообщения: 03.05.2009 20:42
DeKaNszn
а реально ли реализовать след.

если этого параметра несуществует

RegWriteStringValue (HKCU, 'SOFTWARE\MyProg', 'NameProg', trim(Edit1.Text));

тогда инсталлер переходит к след. обзору, и подставляет его от туда

RegWriteStringValue (HKLM, 'SOFTWARE\ProGramm', 'ProgUser', trim(Edit1.Text));

Заранее большое человеческое спасибо.
Автор: DeKaNszn
Дата сообщения: 03.05.2009 21:06
KurtWagner

1)Если не существует ветвь HKCU\SOFTWARE\MyProg или параметр NameProg в ветви HKCU\SOFTWARE\MyProg?

2)При чтении или записи проверять наличие?

Raf_SE

посмотри: http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=1800#4 и http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=1800#6
Автор: spider91
Дата сообщения: 03.05.2009 22:15
Seup


если хочеш могу выложить свой скрипт для Call of Duty 4 где все ето тоже есть, причем звуков там намного больше
Автор: Raf_SE
Дата сообщения: 03.05.2009 22:19
DeKaNszn
Дык мне немного другое нада. Мне нужно только чтоб менялась буковка диска, в зависимости от того, на какой диск юзер кликнул (в списке винчестеров, под путем установки).
Ну и + я вобще ничего не шарю в Паскале
Автор: KurtWagner
Дата сообщения: 03.05.2009 23:04
DeKaNszn При чтении!!!
Автор: DeKaNszn
Дата сообщения: 03.05.2009 23:19
KurtWagner

[more=пример][no]procedure CurPageChanged(CurPageID: Integer);
var
tmp_str:string
begin
If CurPageID = Page.ID
Then begin
If RegValueExists(HKCU, 'SOFTWARE\MyProg', 'NameProg')
Then RegQueryStringValue(HKCU, 'SOFTWARE\MyProg', 'NameProg', tmp_str)
Else begin
If RegValueExists(HKLM, 'SOFTWARE\ProGramm', 'ProgUser')
Then RegQueryStringValue(HKLM, 'SOFTWARE\ProGramm', 'ProgUser', tmp_str);
end;
Edit1.Text:=tmp_str;
end;
end;[/no][/more]

Raf_SE

если так:

Цитата:
сейчас инсталятор при смене диска оставляет путь как есть, только лишь сменив букву диска
т.е D:\Program Files\бла бла

то смотри http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=1780#17
Автор: Victor_Dobrov
Дата сообщения: 04.05.2009 01:11
Raf_SE, когда что-то просишь, потрудись ознакомится хотя-бы с текущей страницей!

Вообще забавно читать эту часть форума, ведь ответ на твой вопрос был несколькими постами выше!
Автор: KurtWagner
Дата сообщения: 04.05.2009 01:15
DeKaNszn оказывается что RegValueExists не дружит с HKCU неверите проверьте. спасибо тебе DeKaNszn выручил как всегда
Автор: DeKaNszn
Дата сообщения: 04.05.2009 04:36
KurtWagner

попробуй [more=этот][no][Setup]
AppId={{1E61215C-C679-4AF9-8098-7C3BD52B562C}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Code]
const
key='Software\Microsoft\Windows\CurrentVersion\Themes';

function InitializeSetup(): Boolean;
var
tmp_str:string;
begin
result:=false;
If RegValueExists(HKCU, key, 'InstallTheme')
Then begin
RegQueryStringValue(HKCU, key, 'InstallTheme', tmp_str);
MsgBox('HKCU\'+key+#10+'InstallTheme='+tmp_str, mbInformation, MB_OK);
end
Else MsgBox('Не существует', mbInformation, MB_OK);
end;[/no][/more] код
У меня все нормально, параметр существует
Автор: tahirg
Дата сообщения: 04.05.2009 07:24
Victor_Dobrov

Цитата:
этот дополнительный объём прописать в подсказке

спасибо за совет, но..
у меня в инсталяторе около 200 баз и пользователь просто устанет читать\считать сколько же займёт установка хотя бы 50 баз
жаль , что нет возможности это реализовать
что нибудь типа калькулятора
поставил человек галочку на
базу 1 в зачёт идёт 1 гб
базу 2 в зачёт 500 мб
базу 3 в зачёт 100 мб
калькулятор тихонько подсчитал и выдал..да хоть месседж "общий обьём полных баз при установке займёт 1.6 гб"
Автор: Raf_SE
Дата сообщения: 04.05.2009 08:51
DeKaNszn
В принципе подходит, но меня смущают 2 вещи:
1. Желательно чтоб небыло выделения жирным шрифтом, ато как-то не эстетично смотрится (или это шрифт такой?..)
2. При нажатии на какой либо диск, меняется не только его буква в пути установки. Допустим изначально путь "C:\Program Files\My program 1.2" а при нажатии на диск, строчка уже становиться "D:\My program 1.2". Мне же нужно чтоб менялась только буковка диска.
Автор: DeKaNszn
Дата сообщения: 04.05.2009 09:35
Raf_SE
ты этот код проверял?
Автор: Raf_SE
Дата сообщения: 04.05.2009 09:46
DeKaNszn
Действительно Чёт маленько туплю.
Лан, а можно сделать чтоб было без жирного шрифта? Ну типа чтоб шрифт выглидил [more=как тут] [/more].
Автор: DeKaNszn
Дата сообщения: 04.05.2009 09:50
Raf_SE

меняй здесь

Код: [no]ListBox.Font.Style:= [fsBold][/no]
Автор: Raf_SE
Дата сообщения: 04.05.2009 09:58
DeKaNszn
Пасибо. Ток хотел бы узнать, какой шрифт по умолчанию используется в Inno? Ну типа хочу чтоб был такой же как на моем скрине
Автор: perf92
Дата сообщения: 04.05.2009 10:20
Можете помоч, как сделать вот такое?

Чтобы нельзя было снять галочку. Типо вдавленное.
Автор: Raf_SE
Дата сообщения: 04.05.2009 10:28
Кстати, а можно сделать чтобы инсталлятор проверял версию DX, и допустим если стоит за февраль прошлого года, тогда бы инсталлятор не запускал установку DX, если ранее, тогда бы запустил её в скрытом режиме.

Пытался покопаться в поиске, но нашёл только это http://www.vincenzo.net/isxkb/index.php?title=DirectX_-_How_to_detect_DirectX_version
Автор: Victor_Dobrov
Дата сообщения: 04.05.2009 11:02
tahirg
Цитата:
у меня в инсталяторе около 200 баз и пользователь просто устанет читать\считать сколько же займёт установка хотя бы 50 баз
жаль , что нет возможности это реализовать
что нибудь типа калькулятора
поставил человек галочку на
базу 1 в зачёт идёт 1 гб
базу 2 в зачёт 500 мб
базу 3 в зачёт 100 мб
калькулятор тихонько подсчитал и выдал..да хоть месседж "общий обьём полных баз при установке займёт 1.6 гб"

Так пропиши компонентам ExtraDiskSpaceRequired=(объём данной базы в байтах), и всё будет подсчитываться автоматом.
Или вот второй способ, когда базы внешние и лежат рядом с инсталлятором:

[Setup]
AppName=Bases
AppVerName=Bases
DefaultDirName={pf}\Bases

[Files]
Source: base1\*; DestDir: {app}\base1; Flags: external; Components: base1
Source: base2\*; DestDir: {app}\base2; Flags: external; Components: base2

[Types]
Name: full; Description: Выбрать все компоненты
Name: custom; Description: Пользовательский режим; Flags: iscustom

[Components]
Name: base1; Description: Установить базу 1
Name: base2; Description: Установить базу 2
Автор: antoniooooo2
Дата сообщения: 04.05.2009 11:24
Как можно реализовать запись в bat файл?(типо как это можно сделать в ini файлы)
Автор: DeKaNszn
Дата сообщения: 04.05.2009 11:55
antoniooooo2

[more=пример][no][Code]
Var
S: TArrayOfString;
procedure InitializeWizard();
begin
SaveStringsToFile('C:\12.bat', S, false);
end;[/no][/more]

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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