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

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

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

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

Ветеран


Contributor


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


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

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

 

Аватара для Johny777

Ветеран


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

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


smile7,
Цитата smile7:
Как удалить окошко создания ярлыков (SelectProgramGroupPage) »
удали секцию [Icons], ярлыки можно (я б сказал нужно) создать через функцию CreateShellLink, только их не будет в логе деинсталятора, а потому их нужно прибрать вручную при удалении
Цитата smile7:
сразу после нажатия кнопки Далее с окна выбора компонентов приступить к установке »
для этого нужно вырубить страницу готовности и не забыть присвоить кнопке Далее надпись Установить
Цитата smile7:
И как заставить секцию [INI] обходить атрибут "только для чтения" редактируемого файла (win7, файлы в {userdocs}) »
через код убрать у файла атрибут, внести значение, вернуть атрибут на место
короче вот всё выше описанное в виде кода-примера:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableReadyPage=yes

[Components]
Name: a; Description: a
Name: b; Description: b

[UninstallDelete]
Type: files; Name: "{userdesktop}\Half-Life 2.lnk"


[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

function SetFileAttributes(lpFileName: String; dwFileAttributes: DWORD): BOOL; external 'SetFileAttributes{#A}@kernel32.dll stdcall';
function GetFileAttributes(lpFileName: String): DWORD; external 'GetFileAttributes{#A}@kernel32.dll stdcall';


procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents: WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    // создадим ярлык на рабочем столе текущего пользователя
    CreateShellLink(ExpandConstant('{userdesktop}\Half-Life 2.lnk'), /// где сохранить ярлык (описание кнстант путей в справке)
    ExpandConstant('Запустить...'), /// описание ярлыка (в свойствах, при наведении мыши)
    ExpandConstant('{app}\common\half-life 2\hl2.exe'),
    '-steam -game hl2 -appid 220', /// параметры запуска
    ExpandConstant('{app}\common\half-life 2'), // рабочая папка
    ExpandConstant('{app}\common\half-life 2\hl2.ico'), // путь к файлу значка (или к экзешнику)
    0, // индекс иконки
    SW_SHOWNORMAL); // флаг
  
    try
      if (GetFileAttributes('C:\setup\Selfish.ini') and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then // если у файла есть атрибут только чтение то
      if SetFileAttributes('C:\setup\Selfish.ini', FILE_ATTRIBUTE_NORMAL) then // снимаем атрибут
      if (GetFileAttributes('C:\setup\Selfish.ini') and FILE_ATTRIBUTE_NORMAL) = FILE_ATTRIBUTE_NORMAL then
       // вносим значение ини
      SetIniString('MySettings', /// имя секции ини
       'Select_Half_Life_2', /// имя ключа
       '', // значение
       'C:\setup\Selfish.ini'); // путь к файлу
    finally
      SetFileAttributes('C:\setup\Selfish.ini', FILE_ATTRIBUTE_READONLY);
    end;
  end;
end;

Отправлено: 14:13, 24-12-2012 | #1431



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

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


Аватара для Mailchik

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


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

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


Цитата Johny777:
удали секцию [Icons], ярлыки можно (я б сказал нужно) создать через функцию CreateShellLink, только их не будет в логе деинсталятора, а потому их нужно прибрать вручную при удалении »
с чего бы нужно?
это конечно хорошо, что Вы стараетесь всё сделать через код, знаете язык и прочее, но в данном случае вы предлагаете человеку создавать велосипед.. Инно - это очень мощный инструмент именно для создания инсталляторов, поэтому и автор этого прекрасного инструмента облегчил жизнь людям, которые не сильны в языке objectpascal, создав секции, константы и тд и тп... И если вопрос решается стандартными средствами Инно, так лучше в код не лезть. Лично моё мнение.
Цитата smile7:
Как удалить окошко создания ярлыков (SelectProgramGroupPage) »
прописать DisableProgramGroupPage=true в секции [Setup]
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:11, 24-12-2012 | #1432


Старожил


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

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


Добрый вечер. Какое значение нужно поставить в секции Flags, чтобы на компоненте уже стоял флажок?

-------
Стремись не к тому, чтобы добиться успеха, а к тому, чтобы твоя жизнь имела смысл.(Альберт Эйнштейн)


Отправлено: 22:00, 26-12-2012 | #1433


Аватара для R.i.m.s.k.y.

Ветеран


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

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


LinkOFF,
Код: Выделить весь код
[Types]

Name: full; Description: Full installation; Flags: iscustom

[Components]

Name: app; Description: описаловка; Flags: disablenouninstallwarning ; Types: full

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 22:10, 26-12-2012 | #1434


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

Старожил


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

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


Возможно ли сделать так, чтобы выбранные в инсталляторе компоненты по умолчанию подгружались из .ini файла который находиться в папке с инсталлятором?

Отправлено: 12:44, 28-12-2012 | #1435


Аватара для Johny777

Ветеран


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

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


Raf-9600, конечно, сам так делаю
вот пример
создай рядом с экзешником инсталла ини файл следующего содержания
читать дальше »
Код: Выделить весь код
[components]
a=yes
b=
c=
d=

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

[Components]
Name: a; Description: a
Name: b; Description: b
Name: c; Description: c
Name: d; Description: d

[  code]
procedure InitializeWizard();
begin
  if FileExists(ExpandConstant('{src}\PreSelector.ini')) then
  with WizardForm.ComponentsList do
  begin
    Checked[Items.IndexOf('a')] := GetIniString('Components', 'a', '', ExpandConstant('{src}\PreSelector.ini')) = 'yes';
    /// отмечаем компонент по индкесу
    /// индекс получаем методом IndexOf('a') Items, который является TStrings;
    /// остальные компонеты по аналогии
  end;
end;

если ини большой, то его лучше парсить классной функцией El Sanchez
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
type
    TIniFile = array of record
        Section: String;
        Entries: TStringList;
    end;

function ParseIniFile(const Filename: String): TIniFile;
var
    iFile: TArrayOfString;
    i: Integer;
begin
    if not FileExists(Filename) then Exit;
    SetArrayLength(Result, 0);
    LoadStringsFromFile(Filename, iFile);
    for i := 0 to GetArrayLength(iFile)-1 do
    begin
        //для всех непустых строк, исключая комментарии
        if (iFile[i] <> '') and (Copy(iFile[i], 1, 1) <> ';') then
        begin
            //если строка является секцией...
            if (Pos('[', iFile[i]) = 1) and (Pos(']', iFile[i]) = Length(iFile[i])) then
            begin
                //...пишем в результат имя секции...
                SetArrayLength(Result, GetArrayLength(Result)+1);
                Result[GetArrayLength(Result)-1].Section := Copy(iFile[i], 2, Length(iFile[i])-2);
            end
                else
            begin
                //...иначе пишем пару параметр/значение
                if TObject(Result[GetArrayLength(Result)-1].Entries) = nil then
                    Result[GetArrayLength(Result)-1].Entries := TStringList.Create;
                Result[GetArrayLength(Result)-1].Entries.Append(iFile[i]);
            end;
        end;
    end;
end;

//своя функция для чтения значений параметров из секций
function GetIniValue(const Section, Key, Default: String; iFile: TIniFile): String;
var
    i, j: Integer;
begin
    Result := Default;
    for i := 0 to GetArrayLength(iFile)-1 do if CompareText(iFile[i].Section, Section) = 0 then
    begin
        for j := 0 to iFile[i].Entries.Count-1 do if CompareText(iFile[i].Entries.Names[j], Key) = 0 then
        begin
            Result := iFile[i].Entries.Values[Key];
            Break;
        end;
        Break;
    end;
end;

procedure InitializeWizard();
var
    iFile: TIniFile;
    i: Integer;
    res: String;
begin
    //парсим ini-файл
    iFile := ParseIniFile('d:\Program Files (x86)\Inno Setup 5\projects\johny777\test.ini');

    //пример 1 - выводим на экран содержимое ini-файла, используя созданную переменную iFile
    for i := 0 to GetArrayLength(iFile)-1 do
        res := res + '[' + iFile[i].Section + ']' + #13#10 + iFile[i].Entries.Text;
    MsgBox(res, mbInformation, MB_OK);

    //пример 2 - выводим на экран значение параметра name34 секции section2, используя созданную переменную iFile и свою функцию GetIniValue
    MsgBox(GetIniValue('section2', 'name34', '', iFile), mbInformation, MB_OK);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:32, 28-12-2012 | #1436


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

Старожил


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

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


Johny777, а в чем принципиальное отличие между твоим кодом и махиной от El Sanchez-а?

Отправлено: 17:39, 28-12-2012 | #1437


Аватара для Johny777

Ветеран


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

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


Raf-9600, в скорости
смотри
функция GetIniString('Components', 'a', '', ExpandConstant('{src}\PreSelector.ini')) = 'yes'; при каждом вызове обращается к файлу PreSelector.ini на жёстком диске
если вызовов 2, то ты и глазом моргнуть не успеешь как они пройдут, но если в ини файле 4 секции и 20-30 ключей, то скорость падает - не заметно для глаза, но когда оптимизация везде по мелочам хромает, то это уже серьёзно
поэтому функция El Sanchez-а загружает весь ини файл, в динамичный массив записей, после чего оттуда с учётом особенностей ини файла как такового заполняется структура TIniFile, те 1 вызов с жёсткого диска, а все дальнейшие - чтение из оперативки, что несоизмеримо быстрее
короче вот отсюда пару странниц прочитай http://forum.oszone.net/thread-235078-92.html
с 919 поста
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:03, 28-12-2012 | #1438


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

Старожил


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

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


Johny777, Благодарю за пояснение, у меня как рас более сотни компонентов %)
Остался только мелкий вопрос, как можно снять галочку из компонента в зависимости от параметров в .ini? Т.е. чтобы допустим если в ini
Код: Выделить весь код
[Game]
Voice=false
То галочка с компонента "Озвучка" снималась.

Отправлено: 19:20, 28-12-2012 | #1439


Аватара для Johny777

Ветеран


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

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


Raf-9600, в Voice=false нет необходимости
Checked[Items.IndexOf('a')] принмает булев значение (True, False), но мы проверяем условие (сравниваем значения)
те GetIniString(...) = 'yes' значит True
а если там нет 'yes' или стоит что-то другое или пусто то будет False, те айтем не будет отмечен, то бишь галки не будет

Цитата Raf-9600:
у меня как рас более сотни компонентов »
тогда грузи в оперативку

Отправлено: 19:39, 28-12-2012 | #1440



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




 
Переход