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

  • Автор темы Автор темы Shegorat
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.
Sanch8,
Дефолтные компоненты страниц инно рисует при переходе на эту страницу, а по скольку по умолчанию они на Redy, то и не увидишь ты ничего на SelectDirPage.
 
Последнее редактирование:
Snoopak96,
Понятно, прокатывает только с ComponentsList или перенести всё на страницу SelectTasksPage.
 
Последнее редактирование:
Приветствую всех! Заранее извиняюсь, если вдруг не в ту тему задаю свой вопрос...

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

Использую 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... Но мне хочется что б был только один архив и инсталлятор все что нужно брал из него... Может можно както по другому это сделать?? Как боллее грамотно это можно реализовать, посоветуйте пожалуйста?
 
Приветствую всех! Заранее извиняюсь, если вдруг не в ту тему задаю свой вопрос...

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

Использую 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 поправьте если я не прав.
 
Последнее редактирование:
PUNISHER, ну да, я понимаю это... я так полагаю, что если пользователь выбирает русскую версию, процедура распаковывает весь архив Data-1.bin для сохранения папки Eng... потом вторая процедура снова открывает тот же архив и распаковывает его во второй раз.. и сохраняет на этот раз папку Rus... поэтому так долго времени все это занимает... Может можно как то проверку поставить? Что б он открывал его единожды (если выбрана русская) и распаковал все что нужно сразу...
 
Последнее редактирование:
Alloc, делать два компонента. к 1 eng, ко 2 распаковку всего архива, потом к этому компоненту прописываешь перемещение файлов из папок eng и rus которые у тебя распакуются, а потом прописываешь удаление этих папок.
 
Последнее редактирование:
в папке Eng - оригинальная игра на английском языке а в папке Rus только русифицированные файлы.
а что помешало тебе упаковать игру отдельно,а файлы локализации отдельно.
Тобишь архив с файлами локализации станет меньше следовательно распаковка будет быстрее

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

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

думаю придется так и сделать.. просто я хотел что б все в одном архиве было..

Спасибо всем за советы
 
Подскажите пожалуйста еще такую вещь.. кто знает:

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

Код:
function MakeDesktopIcon: Boolean; 
begin 
  Result:=DesktopIcon.Checked; 
end;

Вообщем подскажите, как все это связать с ReadyMemo на странице ReadyPage, что б выводилась информация как если бы я делал это через:

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


Заранее спасибо
 
Народ, подскажите, как через Inno Setup переименовать расширение файлов во всех папках\подпапках?
 
Alloc,
Код:
 if CurPageID = wpReady then 
begin 
  if DesktopIcon.Checked = true then
  begin 
    WizardForm.ReadyMemo.Lines.Add('Создание ярлыка:');
    WizardForm.ReadyMemo.Lines.Add('На рабочем столе');
end;
end;
Что-то вроде этого :)
 
Последнее редактирование:
Winst@n, лучше через батник, сможешь его кинуть сюда? я незнаю как его писать:dont_know:
 
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]
 
sergey3695,
nik1967, спасибо за ответ! способ действительно простой, но это не совсем то... если я добавлю допустим что то в задания то строка продублируется, а это не есть хорошо...

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

Дополнительные задачи:
      Создать ярлык на рабочем столе

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

Код:
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;

проблема в том, что я не разбираюсь в программировании и поэтому прошу помочь, кому это не сложно.. Буду очень благодарен. Спасибо
 
Вопрос все еще актуален. Как переименовать файлы по маске по всех папках\подпапках через Inno или батник?:)
 
Mickey1s,
Код:
for /R %%a in (*.reg) do ren "%%a" "*.test"
Переименовывает все файлы с расширение .reg на .test.
 
Mickey1s, в инно:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху