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

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

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

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

Ветеран


Contributor


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


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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Аватара для Johny777

Ветеран


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

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


elmariacci, Ну всё, запилил тебе уберпатчер,для разных папок:
краткое описание работы (а то много буков печатать):
AskForPath( OnlyWithFolder('audio', OnlyVersionFolders( SearchForFolders( AddBackslash(RemoveBackslash( WizardDirValue() )) + 'res_mods') ) ) );
сначала SearchForFolders ищет папки в пути установки + 'res_mods' и возвращает массив путей
он сразу же передаётся в OnlyVersionFolders которая фильтрует пути по последним папкам чтоб они были вериями-номерными и возвращает возможно другой или тот же массив
полученный массив передаётся в OnlyWithFolder, которая ищет на уровне дальше папку "audio" и возвращает новый массив записей
и только теперь полученный массив мы выводим в виде комбобокса на форме и спрашиваем куда именно ставить аудио!

читать дальше »
Код: Выделить весь код

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
InfoBeforeFile=compiler:Default.isl


[Components]
Name: "zvuk"; Description: "Звуки(перед установкой скопируйте папку audio в res_mods\XX.XX.XX\)"
Name: "zvuk\audio"; Description: "Звонок крита";
Name: "zvuk\zasvet"; Description: "Озвучка лампочки";


[Files]
; zvuk Files
Source: {fonts}\*; DestDir: {code:GetInstallPath}\audio; Flags: external; Components: zvuk; Check: CheckInstallPath();


[Dirs]
; for Test
Name: "{app}\res_mods\0.8.5\audio"
Name: "{app}\res_mods\0.8.6\audio"

; DUMMY:
Name: "{app}\res_mods\0.8.7"
Name: "{app}\res_mods\hl2"
Name: "{app}\res_mods\Valve"

                                      
[  code]
var
    InstallPath: String;
    

function GetInstallPath(const Dummy: String): String;
begin
    if ForceDirectories(InstallPath) then Result := RemoveBackslash(InstallPath);
end;

function CheckInstallPath(): Boolean;
begin
    Result := InstallPath <> '';
end;

///////////////////////////

function SearchForFolders(const RootFolder: String): array of String;  // получить имена всех папок в папке (без рекурсии)
var
    NewSearchPath: String;
    FindRec: TFindRec;
    Len: Integer;
begin
    NewSearchPath := AddBackslash(RemoveBackslash(RootFolder));
    if FindFirst(NewSearchPath + '*.*', FindRec) then
    try
        repeat
            if (FindRec.Name <> '.') and (FindRec.Name <> '..') then if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then
            begin
                Len := GetArrayLength(Result);
                SetArrayLength(Result, Len+1);
                Result[Len] := NewSearchPath + FindRec.Name;
            end;
        until not FindNext(FindRec);
    finally
        FindClose(FindRec);
    end;
end;


function OnlyVersion(const iStr: String): String; /// оставлять только цифры
var
    i: Integer;
begin
    Result := '';
    if Length(iStr) > 0 then for i := 1 to Length(iStr) do
    case iStr[i] of
        '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': Result := Result + iStr[i];
    end;
end;


function OnlyWithFolder(const FolderName: String ;const Path: array of String): array of String; // оставлять только пути с именем искомой папки
var
    i, Len: Integer;
begin
    for i := 0 to GetArrayLength(Path)-1 do if DirExists(AddBackslash(RemoveBackslash(Path[i])) + FolderName) then
    begin
        Len := GetArrayLength(Result);
        SetArrayLength(Result, Len+1);
        Result[Len] := Path[i];
    end;
end;



function OnlyVersionFolders(const Path: array of String): array of String; // оставлять папки только с цифрами,
var
    i, Len: Integer;
begin
    for i := 0 to GetArrayLength(Path)-1 do if Length( OnlyVersion(ExtractFileName(Path[i])) ) = 5 then
    begin
        Len := GetArrayLength(Result);
        SetArrayLength(Result, Len+1);
        Result[Len] := Path[i];
    end;
end;


function GetNormalTextLen(const Text: String): Integer;
begin
    with TLabel.Create(nil) do
    try
        Caption := Text;
        Result := Width;
    finally
        Free;
    end;
end;


function AskForPath(const Path: array of String): String;
var
    AskForm: TForm;
    PathCombo: TNewComboBox;
    Len, i: Integer;
begin
    Len := GetArrayLength(Path);
    if Len = 0 then Exit;
    
    AskForm := TForm.Create(nil);
    with AskForm do

    begin
        Caption := 'Какую папку патчить?';
        Position := poScreenCenter;
        
        PathCombo := TNewComboBox.Create(AskForm);
        with PathCombo do
        begin
            Parent := AskForm;
            SetBounds(ScaleX(7), ScaleY(7), ScaleX(GetNormalTextLen(Path[0]) + 25), ScaleY(23));
            Style := csDropDownList;
            for i := 0 to Len-1 do Items.Add(Path[i]);
            ItemIndex := 0;
        end;
        
        ClientWidth := ScaleX(PathCombo.Width + 16);
        ClientHeight := ScaleY(77);
        
        with TButton.Create(AskForm) do
        begin
            Parent := AskForm;
            Left := ScaleX(7);
            Top := ScaleY(PathCombo.Top + PathCombo.Height + 16);
            Caption := SetupMessage(msgButtonOK);
            ModalResult := mrOk;
        end;
        with TButton.Create(AskForm) do
        begin
            Parent := AskForm;
            Left := ScaleX(90);
            Top := ScaleY(PathCombo.Top + PathCombo.Height + 16);
            Caption := SetupMessage(msgButtonCancel);
            ModalResult := mrCancel;
        end;
    
        if ShowModal = mrOk then Result := PathCombo.Text;
    end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
    UnefInstallPath: String;
begin
    if CurPageID = wpSelectComponents then
    begin
        if IsComponentSelected('zvuk') then
        begin
            UnefInstallPath := AskForPath( OnlyWithFolder('audio', OnlyVersionFolders( SearchForFolders( AddBackslash(RemoveBackslash( WizardDirValue() )) + 'res_mods') ) ) );
            Result := UnefInstallPath <> '';
            if not Result then MsgBox('No', mbError, MB_OK) else InstallPath := UnefInstallPath;
        end else Result := True;
    end else Result := True;
end;


PS: чтоб пример работал первый раз установи без компонентов

==============================================================================================

neorom,
вот обновлённая процедура:
читать дальше »
Код: Выделить весь код
procedure BetterInfo();
var
    Buff: String;
begin
    Buff := ExpandConstant(CurrentFilename);
    StringChange(Buff, AppPath, '');
    fLabel.Caption := '{#SetupSetting("AppName")}' + Buff;
end;

Последний раз редактировалось Johny777, 20-04-2013 в 15:24.

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

Отправлено: 14:12, 20-04-2013 | #261



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

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


Пользователь


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

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


saurn, Спасибо за помощь, пошёл собирать!

Отправлено: 15:37, 20-04-2013 | #262


Пользователь


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

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


Цитата Johny777:
вот обновлённая процедура »
Процедура хорошая (даже очень), но может бить я слишком много требую, но всьо равно спрашу. Константа CurrentFilename - которая показуэт имя файла на экран, но нужна ишчо одна константа на экран, например CurrentDirname - єто имя папки в которий в нутри размещается файл CurrentFilename. Константа {#SetupSetting("AppName")} подходит, єсли єсть одни файли без папок, а когда єсть папки из файлами в нутри, тогда идет каша, замисть Help\FAQ.html видайот на єкран My Program\Help\FAQ.html. Я ишчю токой вариант, чтоби било имя папки\имя файла и не имеєт значения сколько папок и файлов єсть в нутри, но ненахожу.

Отправлено: 17:52, 20-04-2013 | #263


Пользователь


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

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


Сдравствуйте ещё раз. Не знаете что испраить в этом коде
Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): Boolean; 
begin 
Result:= True; 
if WizardSelectedComponents(False) = '' then 
begin 
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK); 
Result:= False; 
end; 
end;
чтобы при снятых с компонентов галочек, при переходе, например, с SelectProgramGroupPage на SelectDirPage, а потом вперёд не выдовалось сообщение "Ни один из компонентов не выбран". Мне раньше давали такой код, ноя его посеял. Там я помню что-то было дописано в этой строчке
Код: Выделить весь код
if WizardSelectedComponents(False) = '' then
. Работало безотказно! Спасибо!!!

Отправлено: 21:13, 20-04-2013 | #264


Аватара для Mailchik

Пользователь


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

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


Nightwishh,
Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): boolean;
 begin
 Result := True;
 if CurPageID = wpSelectComponents then
  if WizardSelectedComponents(False) = '' then begin
   MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
   Result := False;
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:38, 20-04-2013 | #265


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

Ветеран


Contributor


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

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


Цитата neorom:
Я ишчю токой вариант, чтоби било имя папки\имя файла и не имеєт значения сколько папок и файлов єсть в нутри »
neorom, перепишите процедуру BetterInfo:
Код: Выделить весь код
procedure BetterInfo();
var
    Buff: String;
begin
    Buff := ExpandConstant(CurrentFilename);
    fLabel.Caption := ExtractRelativePath(ExtractFileDir(Buff), Buff);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:42, 20-04-2013 | #266


Пользователь


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

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


El Sanchez именно что я и хотел.
Спосибо вам за помощь El Sanchez и Johny777.

Отправлено: 22:49, 20-04-2013 | #267


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


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

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


взял обычную распакованную игру весом 9 гб, через ино начал делать стандартный инсталлятор, в процессе компиляции через мин 20 после начала, выбивается окно, мол что то больше или должно быть больше чем 2100000000 байт. Подскожите кто плиз как решить эту проблемку))

Отправлено: 08:42, 22-04-2013 | #268


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


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

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


Подскажите как правильно организовать инсталлер:
есть куча компонентов:
-Компонент1
--Компонент1.1
--Компонент1.2
--Компонент1.3
-Компонент2
-Компонент3
-Компонент4
-Компонент5
---Компонент5.1
---Компонент5.2
-Компонент6
...
-Компонент20
и т.д.

Хочу сделать так чтобы можно было добавлять/удалять компоненты без полного uninstall'a, добавить можно легко, AppModifyPath, но вот инсталлер в этот момент когда снимаешь галки говорит, что не удалит снятые с выделения компоненты. Подскажите как правильно сделать это?

Отправлено: 10:09, 22-04-2013 | #269


Ветеран


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

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


ilya_klimovich, размер пакета не может превышать 2 гигабайта. Разбивку на части используйте, в секции Setup
Код: Выделить весь код
[Setup]
DiskSpanning=yes //разбивка на диски
DiskSliceSize=1566000000 //размер части в байтах
SlicesPerDisk=3 // колличество частей на диск.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 22-04-2013 | #270



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты 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




 
Переход