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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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

 

Аватара для GoshaPolo

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


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

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


Gnom_aka_Lexander, спасибо! Наконец-то! Пол дня бился с этой страницей

Отправлено: 20:07, 30-05-2012 | #141



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

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


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

Старожил


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

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


Цитата Gnom_aka_Lexander:
WizardForm.ComponentsList.ItemEnabled[i] := not IsComponentSelected('Game\Full');»
Выделяет строчку и пишет ошибку colon (':') expeacted.

Отправлено: 20:09, 30-05-2012 | #142


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Raf-9600,
Код: Выделить весь код
procedure ComponentsListClickCheck(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to WizardForm.ComponentsList.ItemCount -1 do
  begin
    case WizardForm.ComponentsList.ItemCaption[i] of
      '1.04c', '1.05b' : // перечисляем через запятую надписи компонентов, которые зависят от GameLoD
      WizardForm.ComponentsList.ItemEnabled[i] := not (IsComponentSelected('GameLoD') or IsComponentSelected('Mod\PlugY'));

      '1.07', '1.08' :
      WizardForm.ComponentsList.ItemEnabled[i] := IsComponentSelected('GameLoD') and not IsComponentSelected('Mod\PlugY');

      ExpandConstant('{cm:Text}'), ExpandConstant('{cm:VoiceDiablo2}'), ExpandConstant('{cm:VersionGame}') :
      begin
        WizardForm.ComponentsList.Checked[i] := IsComponentSelected('Game\Full');
        WizardForm.ComponentsList.ItemEnabled[i] := not IsComponentSelected('Game\Full');
      end;
    end;
  end;
  OldEvent_ComponentsListClickCheck(Sender);
end;

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

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

Отправлено: 20:13, 30-05-2012 | #143


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

Старожил


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

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


Gnom_aka_Lexander, благодарю, а как решить вторую проблему? Ну т.е. если выбрать компонент Game\Lokal то ни GameDiablo2\Text, ни GameDiablo2\VoiceD2, ни Version нельзя выбрать

Отправлено: 20:19, 30-05-2012 | #144


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Raf-9600, вот так, тогда:
читать дальше »
Код: Выделить весь код
procedure ComponentsListClickCheck(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to WizardForm.ComponentsList.ItemCount -1 do
  begin
    case WizardForm.ComponentsList.ItemCaption[i] of
      '1.04c', '1.05b' : // перечисляем через запятую надписи компонентов, которые зависят от GameLoD
      WizardForm.ComponentsList.ItemEnabled[i] := not (IsComponentSelected('GameLoD') or IsComponentSelected('Mod\PlugY'));

      '1.07', '1.08' :
      WizardForm.ComponentsList.ItemEnabled[i] := IsComponentSelected('GameLoD') and not IsComponentSelected('Mod\PlugY');

      ExpandConstant('{cm:Text}'), ExpandConstant('{cm:VoiceDiablo2}'), ExpandConstant('{cm:VersionGame}') :
      begin
        if IsComponentSelected('Game\Full') then WizardForm.ComponentsList.Checked[i] := IsComponentSelected('Game\Full');
        WizardForm.ComponentsList.ItemEnabled[i] := not IsComponentSelected('Game\Full');
      end;
    end;
  end;
  OldEvent_ComponentsListClickCheck(Sender);
end;

Обрати внимание на условие - if IsComponentSelected('Game\Full') then - тоесть компонент принудительно выбран, только если выбран компонет Game\Full, в противном случае его можно выбирать самостоятельно.

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

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

Отправлено: 20:32, 30-05-2012 | #145


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

Ветеран


Contributor


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

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


Цитата Raf-9600:
Ктонить может модифицировать скрипт для конвертации OGG чтобы он выполнялся два раза, т.е. нужно чтобы первый раз он конвертировал содержимое папки {app}\data\local\sfx (при условии что выбран компонент "GameVoice"), а второй раз чтобы конвертировал содержимое \data\global\music (при условии что выбран компонент "Music") »
Raf-9600, модифицировать не стал, написал свой вариант.
читать дальше »

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

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

procedure RecodeOgg(Path, Mask: String);
var
    iFiles: TArrayOfString;
    FindRec: TFindRec;
    ResultCode, i: Integer;
begin
    try
        RecodePage.Show;
        if FindFirst(ExpandConstant(AddBackslash(RemoveBackslash(Path)) + Mask), FindRec) then
        try
            repeat
                if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
                begin
                    SetArrayLength(iFiles, GetArrayLength(iFiles)+1);
                    iFiles[GetArrayLength(iFiles)-1] := ExpandConstant(AddBackslash(RemoveBackslash(Path)) + FindRec.Name);
                end;
            until not FindNext(FindRec);
        finally
            FindClose(FindRec);
        end;
        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 CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        if IsComponentSelected('GameVoice') then RecodeOgg('{app}\data\local\sfx', '*.ogg');
        if IsComponentSelected('Music') then RecodeOgg('{app}\data\global\music', '*.ogg');
    end;
end;

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

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

Отправлено: 21:22, 30-05-2012 | #146


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

Старожил


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

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


Цитата El Sanchez:
модифицировать не стал, написал свой вариант. »
Это его как-то вызывать нужно? Ибо вот только что проверил и никакой конвертации не произошло...

Отправлено: 22:02, 30-05-2012 | #147


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

Ветеран


Contributor


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

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


Raf-9600, вызывается на этапе ssPostInstall, смотрите в конце. Папки существуют-то, где ogg-файлы находятся? oggdec.exe в {app} или где-то еще?

Отправлено: 22:11, 30-05-2012 | #148


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

Старожил


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

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


El Sanchez, Вот весь скрипт:

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

                


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

[components]
Name: "GameVoice"; Description: GameVoice; Types: full
Name: "Music"; Description: "Music"; Types: full


[Files]

Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_05.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_06.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_07.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_08.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_09.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_10.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_sor.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_intro.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_intro_sor.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_init.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q2_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q2_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q2_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q3_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q3_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q3_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_after_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_early_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_init.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_instructions.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q5_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q5_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q5_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q6_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q6_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q6_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_goodday.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_goodevening.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_goodmorning.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_greetings.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_hello.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_orderwelcomes.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_welcomeback.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_yes.ogg; DestDir: {app}\data\local\sfx\Act1\Akara; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_andariel.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_toolsoftrade.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_catacombs.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_jail.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_monastery.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_wilderness.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_find_cairnstones.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_find_treeofinifuss.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_find_tristram.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_rescue_cain.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_andariel.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_toolsoftrade.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_catacombs.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_jail.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_monastery.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_wilderness.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_find_cairnstones.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_find_treeofinifuss.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_find_tristram.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_rescue_cain.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_afterA1Q6init.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q3_after.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q3_early.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q3_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_rescuedbyhero.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_rescuedbyrogues.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_tragedyoftristram.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q5_after.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q5_early.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q5_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_after.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_early.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_init.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_help1.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_help2.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_help3.ogg; DestDir: {app}\data\local\sfx\Act1\Cain; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_05.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_06.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_bar.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_intro.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_intro_bar.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_after_alt.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_after_main.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q2_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q2_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q2_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_init.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_after_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_instructions.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_successful_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q5_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q5_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q5_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q6_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q6_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q6_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_farewell.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodbye.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodday.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodevening.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodmorning.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodtoseeyou.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_greetings.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_hello.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_heythere.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_needhelp.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_whatcanIdoforyou.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_whatchaneed.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_yes.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_05.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_06.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_nec.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_intro.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed; 



Source: D:\Diablo 2\Music\D2 OST\Act1\Cave (caves).ogg; DestName: caves.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Crypt.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Monastery.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Rogue (town1).ogg; DestName: town1.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Wilderness (wild).ogg; DestName: wild.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act2\Desert.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act2\Sanctuary (Harem).ogg; DestName: Harem.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act2\Tombs.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act2\Toru (town2).ogg; DestName: town2.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act3\Jungle.ogg; DestDir: {app}\data\global\music\Act3\
Source: D:\Diablo 2\Music\D2 OST\Act3\Spider.ogg; DestDir: {app}\data\global\music\Act3\
Source: D:\Diablo 2\Music\D2 OST\Act4\Leoric (diablo).ogg; DestName: diablo.ogg; DestDir: {app}\data\global\music\Act4\
Source: D:\Diablo 2\Music\D2 OST\Act4\Mesa.ogg; DestDir: {app}\data\global\music\Act4\

Source: D:\Diablo 2\Utilites\Ogg - Wav\oggdec.exe; DestDir: {app}; Flags: ignoreversion; 



[C0de]
var
    RecodePage: TOutputProgressWizardPage;

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

procedure RecodeOgg(Path, Mask: String);
var
    iFiles: TArrayOfString;
    FindRec: TFindRec;
    ResultCode, i: Integer;
begin
    try
        RecodePage.Show;
        if FindFirst(ExpandConstant(AddBackslash(RemoveBackslash(Path)) + Mask), FindRec) then
        try
            repeat
                if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
                begin
                    SetArrayLength(iFiles, GetArrayLength(iFiles)+1);
                    iFiles[GetArrayLength(iFiles)-1] := ExpandConstant(AddBackslash(RemoveBackslash(Path)) + FindRec.Name);
                end;
            until not FindNext(FindRec);
        finally
            FindClose(FindRec);
        end;
        for i := 1 to GetArrayLength(iFiles) do
        begin
            RecodePage.SetProgress(i-1, GetArrayLength(iFiles));
            RecodePage.SetText(iFiles[i-1], IntToStr((i-1)*100/GetArrayLength(iFiles)) + ' %');
            Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
            DeleteFile(iFiles[i]);
        end;
    finally
        RecodePage.Hide;
    end;
end;

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

Отправлено: 22:19, 30-05-2012 | #149


Аватара для Sanshalay

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


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

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


Как создать свою пустую страницу в инсталляторе?

Отправлено: 22:32, 30-05-2012 | #150



Компьютерный форум 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




 
Переход