Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 5]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для YURSHAT

Старожил


Сообщения: 163
Благодарности: 78

Профиль | Отправить PM | Цитировать


Цитата Sanshalay:
Как создать свою пустую страницу в инсталляторе? »
Пример
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

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

[CustomMessages]
ru.PageName=Название моей страницы
ru.PageDescr=Описание моей страницы

[_code]
var
  MyPage: TWizardPage;
  Label1: TLabel;
  
procedure RedesignWizardForm;
begin
  MyPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:PageName}'), ExpandConstant('{cm:PageDescr}'));
  
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := MyPage.Surface;
    SetBounds(ScaleX(0), ScaleY(216), ScaleX(417), ScaleY(17));
    Caption := SetupMessage(msgInfoAfterClickLabel);
  end;
end;

procedure InitializeWizard;
begin
  RedesignWizardForm;
end;

-------
Если я знаю, что знаю мало, я добьюсь того, чтобы знать больше... В.И. Ленин
Krinkels.org - сжатие данных и создание инсталляторов

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:48, 31-05-2012 | #151



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как исправить эту ошибку ?

http://s019.radikal.ru/i607/1205/b3/13fc49b5389c.jpg

Отправлено: 02:02, 31-05-2012 | #152


Аватара для Gnom_aka_Lexander

Ветеран


Сообщения: 978
Благодарности: 564

Профиль | Сайт | Отправить PM | Цитировать


ILIA_1992, так-то оффтоп. Но, отвечу - использовать для распаковки те-же параметры, которые были при упаковке. от Inno это никаким боком не зависит.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 09:57, 31-05-2012 | #153


Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Отправить PM | Цитировать


Gnom_aka_Lexander,

Я давно репаки не делал . Всё забыл .
Начинаю с нуля.
А поподробнее про ошибку можно ? Заранее спасибо.

И ещё один вопрос .

Как найти реестр ? например Alan Wake's American Nightmare .

Отправлено: 10:47, 31-05-2012 | #154


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Raf-9600:
Ибо вот только что проверил и никакой конвертации не произошло... »
Цитата Raf-9600:
Вот весь скрипт: »
Raf-9600, ясно, ведь в указанных папках ogg-файлов нет, они глубже - в подпапках. Вот вариант №2, универсальный. В процедуру RecodeOgg добавлен параметр Recurse (True - искать в подпапках, False - только в указанной папке).
читать дальше »

[code]
Код: Выделить весь код
var
    RecodePage: TOutputProgressWizardPage;


function FindFiles(Path, Mask: String; Recurse: BOOL): TArrayOfString;
var
    FindRecAll, FindRecMask: TFindRec;
begin
    if not DirExists(Path) then Exit;
    //
    if FindFirst(AddBackslash(RemoveBackslash(Path)) + Mask, FindRecMask) then
    try
        repeat
            if (FindRecMask.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
            begin
                SetArrayLength(Result, GetArrayLength(Result)+1);
                Result[GetArrayLength(Result)-1] := AddBackslash(RemoveBackslash(Path)) + FindRecMask.Name;
            end;
        until not FindNext(FindRecMask);
    finally
        FindClose(FindRecMask);
    end;
    //
    if Recurse then
    begin
        if FindFirst(AddBackslash(RemoveBackslash(Path)) + '*', FindRecAll) then
        try
            repeat
                if (FindRecAll.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and (FindRecAll.Name <> '.') and (FindRecAll.Name <> '..') then
                    Result := FindFiles(AddBackslash(RemoveBackslash(Path)) + FindRecAll.Name, Mask, Recurse);
            until not FindNext(FindRecAll);
        finally
            FindClose(FindRecAll);
        end;
    end;
end;

procedure RecodeOgg(Path, Mask: String; Recurse: BOOL);
var
    iFiles: TArrayOfString;
    ResultCode, i: Longint;
begin
    try
        RecodePage.Show;
        iFiles := FindFiles(Path, Mask, Recurse);
        for i := 1 to GetArrayLength(iFiles) do
        begin
            RecodePage.SetProgress(i, GetArrayLength(iFiles));
            RecodePage.SetText(iFiles[i-1], IntToStr(i*100/GetArrayLength(iFiles)) + ' %');

            Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i-1]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
            DeleteFile(iFiles[i-1]);
        end;
    finally
        RecodePage.Hide;
    end;
end;

procedure InitializeWizard();
begin
    RecodePage := CreateOutputProgressPage('Обработка файлов', '');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        if IsComponentSelected('GameVoice') then RecodeOgg(ExpandConstant('{app}\data\local\sfx'), '*.ogg', True);
        if IsComponentSelected('Music') then RecodeOgg(ExpandConstant('{app}\data\global\music'), '*.ogg', True);
    end;
end;

P.S. Не увидел в вашем коде привязку какого-нибудь файла к компоненту.
P.P.S. Вместо выделенных строк можете написать для теста чего-нибудь нейтральное, типа Sleep(100).

Последний раз редактировалось El Sanchez, 31-05-2012 в 15:50. Причина: fix

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:07, 31-05-2012 | #155


Аватара для Raf-9600

Старожил


Сообщения: 398
Благодарности: 21

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
Не увидел в вашем коде привязку какого-нибудь файла к компоненту. »
Это тестовый скрипт.

Все файлы которые отвечают за GameVoice сконвертировались отлично, но вот когда дело дошло до Music то появилась ошибка Out Of Range. и компилятор выделил:
Код: Выделить весь код
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
Ещё как я понял этот скрипт создает свою страничку, а для меня это совсем не подходит, так как это вряд ли получиться совместить с теми украшательствами что уже имеются у меня.

И ещё на данный момент скрипт в поле статуса пишет какой файл обрабатывает, а в том поле что нижу, пишет проценты. Но мне бы хотелось чтобы в поле статуса писалось во время обработки GameVoice - "Конвертация монологов", а во время обработки Music - "Конвертация музыки". И после этих надписей уже можно отображение процентов прогресса.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:10, 31-05-2012 | #156


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Raf-9600:
Все файлы которые отвечают за GameVoice сконвертировались отлично, но вот когда дело дошло до Music то появилась ошибка Out Of Range. и компилятор выделил: »
Raf-9600, мерси, поправил.
Цитата Raf-9600:
Ещё как я понял этот скрипт создает свою страничку, а для меня это совсем не подходит, так как это вряд ли получиться совместить с теми украшательствами что уже имеются у меня.
И ещё на данный момент скрипт в поле статуса пишет какой файл обрабатывает, а в том поле что нижу, пишет проценты. Но мне бы хотелось чтобы в поле статуса писалось во время обработки GameVoice - "Конвертация монологов", а во время обработки Music - "Конвертация музыки". И после этих надписей уже можно отображение процентов прогресса. »
Raf-9600, лады, раз хотите стандартную, то вариант №3:
читать дальше »

Код: Выделить весь код
[code]
function FindFiles(Path, Mask: String; Recurse: BOOL): TArrayOfString;
var
    FindRecAll, FindRecMask: TFindRec;
begin
    if not DirExists(Path) then Exit;
    //
    if FindFirst(AddBackslash(RemoveBackslash(Path)) + Mask, FindRecMask) then
    try
        repeat
            if (FindRecMask.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
            begin
                SetArrayLength(Result, GetArrayLength(Result)+1);
                Result[GetArrayLength(Result)-1] := AddBackslash(RemoveBackslash(Path)) + FindRecMask.Name;
            end;
        until not FindNext(FindRecMask);
    finally
        FindClose(FindRecMask);
    end;
    //
    if Recurse then
    begin
        if FindFirst(AddBackslash(RemoveBackslash(Path)) + '*', FindRecAll) then
        try
            repeat
                if (FindRecAll.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and (FindRecAll.Name <> '.') and (FindRecAll.Name <> '..') then
                    Result := FindFiles(AddBackslash(RemoveBackslash(Path)) + FindRecAll.Name, Mask, Recurse);
            until not FindNext(FindRecAll);
        finally
            FindClose(FindRecAll);
        end;
    end;
end;

procedure RecodeOgg(Path, Mask, Status: String; Recurse: BOOL);
var
    iFiles: TArrayOfString;
    ResultCode, i: Longint;
begin
    iFiles := FindFiles(Path, Mask, Recurse);
    with WizardForm.ProgressGauge do
    begin
        Position := 0;
        Max := GetArrayLength(iFiles)-1;
        for i := 1 to Max+1 do
        begin
            Position := i;
            WizardForm.StatusLabel.Caption := Status + IntToStr(i*100/(Max+1)) + ' %';
            Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i-1]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
            DeleteFile(iFiles[i-1]);
        end;
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        if IsComponentSelected('GameVoice') then RecodeOgg(ExpandConstant('{app}\data\local\sfx'), '*.ogg', 'Конвертация монологов выполнена на... ', True);
        if IsComponentSelected('Music') then RecodeOgg(ExpandConstant('{app}\data\global\music'), '*.ogg', 'Конвертация музыки выполнена на... ', True);
    end;
end;

Последний раз редактировалось El Sanchez, 31-05-2012 в 18:22. Причина: реализовал хотелку

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:11, 31-05-2012 | #157


Аватара для Raf-9600

Старожил


Сообщения: 398
Благодарности: 21

Профиль | Отправить PM | Цитировать


El Sanchez, Вот теперь все работает как нужно, Благодарю

На ум пришло лишь два нюанса которыми его можно было бы дополнить:
1. Было бы очень круто, если бы прогресс-бар так же бы был в таскбаре (на ярлыке инсталлятора) если у пользователя Win7.
2. Так как в моем скрипте на странице инсталляциии отображается только строчка статуса, то хотелось бы чтобы проценты хода выполнения отображались тоже в строке статуса, после надписи. Т.е. чтобы можно было написать "Конвертация музыки выполнена на" и справа (не снизу) отображение процентов.

Это все конечно не критично, но хотелось бы иметь

Последний раз редактировалось Raf-9600, 31-05-2012 в 17:52.


Отправлено: 16:55, 31-05-2012 | #158


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Raf-9600:
1. Было бы очень круто, если бы прогресс-бар так же бы был в таскбаре (на ярлыке инсталлятора) если у пользователя Win7. »
Raf-9600, такое возможно сделать только в юникодной версии Inno.
Цитата Raf-9600:
2. Так как в моем скрипте на странице инсталляциии отображается только строчка статуса, то хотелось бы чтобы проценты хода выполнения отображались тоже в строке статуса, после надписи. Т.е. чтобы можно было написать "Конвертация музыки выполнена на" и справа (не снизу) отображение процентов. »
Raf-9600, изменил свой предыдущий код.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:24, 31-05-2012 | #159


Аватара для Raf-9600

Старожил


Сообщения: 398
Благодарности: 21

Профиль | Отправить PM | Цитировать


El Sanchez, ИМХО его можно было бы и в первый пост, под спойлер "Ссылки на примеры скриптов" закинуть. Так как уверен, что этот код многим пригодиться.

Отправлено: 20:01, 31-05-2012 | #160



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход