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

Статус
В этой теме нельзя размещать новые ответы.

Snoopak96

Старожил
Sanch8,
Дефолтные компоненты страниц инно рисует при переходе на эту страницу, а по скольку по умолчанию они на Redy, то и не увидишь ты ничего на SelectDirPage.
 
Последнее редактирование:

Sanch8

Новичок
Snoopak96,
Понятно, прокатывает только с ComponentsList или перенести всё на страницу SelectTasksPage.
 
Последнее редактирование:

Alloc

Новичок
Приветствую всех! Заранее извиняюсь, если вдруг не в ту тему задаю свой вопрос...

Уважаемые, подскажите пожалуйста как грамотно реализовать следующее:

Использую ISDone... Есть две папки - Eng и Rus.. в папке Eng - оригинальная игра на английском языке а в папке Rus только русифицированные файлы. Я запаковал эти две папки FreeArc'ом в один архив - Data-1.bin. При выборе пользователем английской версии, распаковывается папка Eng из архива. При выборе русской - папки Eng и Rus.Делаю так:

Код:
if not ISArcExtract ( 0, 50, ExpandConstant('{src}\data-1.bin'),  ExpandConstant('{app}'), 'Eng', false, '', '', ExpandConstant('{app}\Eng'), notPCFonFLY {PCFonFLY}) then break;
       
if not ISArcExtract ( 1, 50, ExpandConstant('{src}\data-1.bin'),  ExpandConstant('{app}'), 'Rus', false, '', '', ExpandConstant('{app}\Rus'),  notPCFonFLY {PCFonFLY}) then break;
Проблема в том, что распаковка происходит гораздо дольше нежели если б я использовал отдельный архив для папки Rus... Но мне хочется что б был только один архив и инсталлятор все что нужно брал из него... Может можно както по другому это сделать?? Как боллее грамотно это можно реализовать, посоветуйте пожалуйста?
 

PUNISHER

Участник
Приветствую всех! Заранее извиняюсь, если вдруг не в ту тему задаю свой вопрос...

Уважаемые, подскажите пожалуйста как грамотно реализовать следующее:

Использую ISDone... Есть две папки - Eng и Rus.. в папке Eng - оригинальная игра на английском языке а в папке Rus только русифицированные файлы. Я запаковал эти две папки FreeArc'ом в один архив - Data-1.bin. При выборе пользователем английской версии, распаковывается папка Eng из архива. При выборе русской - папки Eng и Rus.Делаю так:

Код:
if not ISArcExtract ( 0, 50, ExpandConstant('{src}\data-1.bin'),  ExpandConstant('{app}'), 'Eng', false, '', '', ExpandConstant('{app}\Eng'), notPCFonFLY {PCFonFLY}) then break;
       
if not ISArcExtract ( 1, 50, ExpandConstant('{src}\data-1.bin'),  ExpandConstant('{app}'), 'Rus', false, '', '', ExpandConstant('{app}\Rus'),  notPCFonFLY {PCFonFLY}) then break;
Проблема в том, что распаковка происходит гораздо дольше нежели если б я использовал отдельный архив для папки Rus... Но мне хочется что б был только один архив и инсталлятор все что нужно брал из него... Может можно както по другому это сделать?? Как боллее грамотно это можно реализовать, посоветуйте пожалуйста?
ну ты сам подумай, у тебя в архиве две папки. при распаковке данного архива сначала происходит чтение всех данных, а потом распаковка нужных тебе данных, соответственно если у тебя в архиве одна папка, то архив быстрее распакуется, нежели чем две папки. так что либо забей на скорость, либо пакуй отдельно.

p.s поправьте если я не прав.
 
Последнее редактирование:

Alloc

Новичок
PUNISHER, ну да, я понимаю это... я так полагаю, что если пользователь выбирает русскую версию, процедура распаковывает весь архив Data-1.bin для сохранения папки Eng... потом вторая процедура снова открывает тот же архив и распаковывает его во второй раз.. и сохраняет на этот раз папку Rus... поэтому так долго времени все это занимает... Может можно как то проверку поставить? Что б он открывал его единожды (если выбрана русская) и распаковал все что нужно сразу...
 
Последнее редактирование:

PUNISHER

Участник
Alloc, делать два компонента. к 1 eng, ко 2 распаковку всего архива, потом к этому компоненту прописываешь перемещение файлов из папок eng и rus которые у тебя распакуются, а потом прописываешь удаление этих папок.
 
Последнее редактирование:

Loner

Новичок
в папке Eng - оригинальная игра на английском языке а в папке Rus только русифицированные файлы.
а что помешало тебе упаковать игру отдельно,а файлы локализации отдельно.
Тобишь архив с файлами локализации станет меньше следовательно распаковка будет быстрее

или вообще запаковать в разные архивы.В чём проблема?
Это делать ризонно если видео содержит несколько дорог.На упаковке не скажется.
А файлы с текстом весят настолько мало.Что ты ничего не заметишь
 
Последнее редактирование модератором:

Winst@n

Участник
Проверенный
Код:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.bin'),  ExpandConstant('{app}'), 'Eng', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\data-1.bin'),  ExpandConstant('{app}'), 'Rus', false, '', '', ExpandConstant('{app}'),  notPCFonFLY {PCFonFLY}) then break;

Если я вас понял,у вас в тестовом прогоне в любом случае будет распаковывать обе папки.
И так же у вас после распаковки файлы из папки rus должны заменить файлы те что распакуются из папки eng.
Не расставляйте % сами пускай прогонится распаковка потом подключите файл recordsи тогда все должно быть нормально.

Loner,
Используй кнопку изменить. Я пакую так для того что бы занимало все это меньше если допустим есть возможность прогнать через srep и т.д.

Но прежде расфасовываю файлики.
 
Последнее редактирование:

Alloc

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

Спасибо всем за советы
 

Alloc

Новичок
Подскажите пожалуйста еще такую вещь.. кто знает:

Я поместил CheckBox на страницу SelectProgramGroupPage - Создать ярлык на рабочем столе. Так же функцию добавил:

Код:
function MakeDesktopIcon: Boolean; 
begin 
  Result:=DesktopIcon.Checked; 
end;
Вообщем подскажите, как все это связать с ReadyMemo на странице ReadyPage, что б выводилась информация как если бы я делал это через:

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

Заранее спасибо
 

Mickey1s

Ветеран
Модератор
Народ, подскажите, как через Inno Setup переименовать расширение файлов во всех папках\подпапках?
 

sergey3695

Ветеран
Модератор
Alloc,
Код:
 if CurPageID = wpReady then 
begin 
  if DesktopIcon.Checked = true then
  begin 
    WizardForm.ReadyMemo.Lines.Add('Создание ярлыка:');
    WizardForm.ReadyMemo.Lines.Add('На рабочем столе');
end;
end;
Что-то вроде этого :)
 
Последнее редактирование:

Mickey1s

Ветеран
Модератор
Winst@n, лучше через батник, сможешь его кинуть сюда? я незнаю как его писать:unknown:
 

nik1967

Old Men
Проверенный
Alloc,
[SOURCE="inno"][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Icons]
Name: {group}\Удалить My Program; Filename: {uninstallexe}; Workingdir: {app};

Код:
var
  DesktopIcon: TCheckBox;

procedure InitializeWizard();                       
begin
  DesktopIcon:= TCheckBox.Create(WizardForm);
  with DesktopIcon do begin
    Parent:= WizardForm.SelectProgramGroupPage;
    Checked:= True;
    Top:= ScaleY(120);
    Width:= ScaleX(320);
    Caption := 'Создать ярлык на рабочем столе';
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpReady:
    begin
      if DesktopIcon.Checked then begin
        WizardForm.ReadyMemo.Lines.Add('');
        WizardForm.ReadyMemo.Lines.Add('Дополнительные задачи:');
        WizardForm.ReadyMemo.Lines.Add('      '+'Создать ярлык на рабочем столе');
      end;
    end;
  end;
end;[/SOURCE][/SPOILER]
 

Alloc

Новичок
sergey3695,
nik1967, спасибо за ответ! способ действительно простой, но это не совсем то... если я добавлю допустим что то в задания то строка продублируется, а это не есть хорошо...

Код:
Дополнительные задачи:
      Дополнительное ПО:
         Установить Java

Дополнительные задачи:
      Создать ярлык на рабочем столе
Может можно как-то воспользоваться ниже приведенной функцией?

Код:
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
проблема в том, что я не разбираюсь в программировании и поэтому прошу помочь, кому это не сложно.. Буду очень благодарен. Спасибо
 

Mickey1s

Ветеран
Модератор
Вопрос все еще актуален. Как переименовать файлы по маске по всех папках\подпапках через Inno или батник?:)
 

Mailchik

Старожил
Проверенный
Mickey1s,
Код:
for /R %%a in (*.reg) do ren "%%a" "*.test"
Переименовывает все файлы с расширение .reg на .test.
 

Mailchik

Старожил
Проверенный
Mickey1s, в инно:
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху