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

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

 

Аватара для Johny777

Ветеран


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

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


SatHan,
апдейт предыдущего кода:
читать дальше »
Код: Выделить весь код
#define Section_1 "Section1"
#define Section_2 "Section2"

[Setup]
AppName=Reg_Path_Demo
AppVerName=Reg_Path_Demo
DefaultDirName={pf}\Reg_Path_Demo

// для теста
//appid=Application1
appid=Application2


[Files]
Source: "File\1\*"; DestDir: "{code:Get_Path_0}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "File\2\*"; DestDir: "{code:Get_Path_1}"; Flags: ignoreversion recursesubdirs createallsubdirs


[  code]
var
  Page: TInputDirWizardPage;

function Get_Path_0(Param: String): String;
begin
  Result := Page.Values[0];
end;

function Get_Path_1(Param: String): String;
begin
  Result := Page.Values[1];
end;

procedure InitializeWizard();
begin
  Page:=CreateInputDirPage(wpWelcome,'копирование файлов', 'Укажите каталоги','',False,'NewFolder');
  with Page do
  begin
    Add('путь 1:');
    Values[0] := RemoveBackslash(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Application1_is1,InstallLocation|C:}')) + '\{#Section_1}';
    Add('путь 2:');
    Values[1] := RemoveBackslash(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Application2_is1,InstallLocation|C:}')) + '\{#Section_2}';   //
  end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
begin
  Result := 'путь 1:' + NewLine + Space + Page.Values[0] + NewLine + NewLine + 'путь 2:' + NewLine + Space + Page.Values[1];
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := PageID = wpSelectDir;
end;


Цитата SatHan:
Если интересно конечно »
Спасибо!
взял на заметку
мало ли может пригодится

Последний раз редактировалось Johny777, 11-09-2012 в 01:39.

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

Отправлено: 01:22, 11-09-2012 | #881



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

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


Аватара для MogilShik2007

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


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

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


Johny777, спасибо заработало, интересует:

Код: Выделить весь код
enablefire(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 50);
у тебя стоит значение 500, эт что такое?

SatHan, там еще 2 переменных меняется
С:\Windows\Temp ))))


И еще, фон окон, можно немного сероватым сделать, скрипт есть какой нибудь простой?

Последний раз редактировалось MogilShik2007, 11-09-2012 в 05:51.


Отправлено: 05:27, 11-09-2012 | #882


Аватара для SatHan

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


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

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


Цитата MogilShik2007:
там еще 2 переменных меняется
С:\Windows\Temp )))) »
читать дальше »
Об этом в курсе. то находится в окне Системные переменные.
Они относятся к общей группе будь ты Администратор или Пользователь. я про них не стал описывать из соображений (мало ли). Нет смысла их трогать.
А Переменные среды пользователя XXX - это относится к текущей учётной записи в которой можешь добавлять, изменять и удалять (если знаешь что к чему). туда можно например добавить что то своё. скажем какую нибудь папку. к примеру жмём Создать [Переменная - 7Z] [Значение - C:\Program Files\7-Zip\] и при выполнении %7Z% перейдёт в папку C:\Program Files\7-Zip\
Да хоть Inno. Переменная - INNO, Значение - C:\Program Files\Inno Setup 5\ итог %INNO%

Последний раз редактировалось SatHan, 11-09-2012 в 10:55.

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

Отправлено: 10:39, 11-09-2012 | #883


Аватара для MogilShik2007

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


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

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


Я знаю, эт так к слову написал)))

SatHan, ты кстати с ReDrawText не сталкивался? А то не пойму как разноцветный текст на разных страницах делать)))

Отправлено: 11:10, 11-09-2012 | #884


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

Ветеран


Contributor


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

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


Цитата Johny777:
мой вопрос касательно загрузки всего ini файла в переменную с последующим считыванием из этой самой переменной всё ещё более чем в силе! »
Johny777, я б забил на это дело, но если очень хочется:
читать дальше »

Код: Выделить весь код
type
    TIniFile = array of record
        Section: String;    //секция
        Entries: array of record    //массив записей Name - Value, относящихся к секции
            Name: String;    //параметр
            Value: String;    //значение
        end;
    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
                //...иначе пишем пару параметр/значение
                SetArrayLength(Result[GetArrayLength(Result)-1].Entries, GetArrayLength(Result[GetArrayLength(Result)-1].Entries)+1);
                Result[GetArrayLength(Result)-1].Entries[GetArrayLength(Result[GetArrayLength(Result)-1].Entries)-1].Name := Trim(Copy(iFile[i], 1, Pos('=', iFile[i])-1));
                Result[GetArrayLength(Result)-1].Entries[GetArrayLength(Result[GetArrayLength(Result)-1].Entries)-1].Value := Trim(Copy(iFile[i], Pos('=', iFile[i])+1, Length(iFile[i])));
            end;
        end;
    end;
end;

procedure InitializeWizard();
var
    iFile: TIniFile;
    i, j: Integer;
    res: String;
begin
    iFile := ParseIniFile('c:\boot.ini');
    for i := 0 to GetArrayLength(iFile)-1 do
    begin
        res := res + '[' + iFile[i].Section + ']' + #13#10;
        for j := 0 to GetArrayLength(iFile[i].Entries)-1 do
            res := res + iFile[i].Entries[j].Name + '=' + iFile[i].Entries[j].Value + #13#10;
    end;
    MsgBox(res, mbInformation, MB_OK);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:56, 11-09-2012 | #885


Аватара для Johny777

Ветеран


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

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


El Sanchez,
Спасибо тебе большое за труды!

Но неужели "загрузка всего ини в переменную..." не даст почувствовать особую разницу скорости обработки между считыванием строк из переменной и многократным обращением к файлу?

и извиняюсь за тупой вопрос
как теперь считывать значения?

так не работает

iFile := ParseIniFile('C:\setup\Selfish.ini');
...
No_Quit_Dialog := (GetIniString('Constructor', 'Quit_Dialog_Off', '', res) = '1');

неужели он перестал быть ини и теперь нужно искать строку Quit_Dialog_Off=1 целиком

Последний раз редактировалось Johny777, 11-09-2012 в 14:42.


Отправлено: 14:26, 11-09-2012 | #886


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

Ветеран


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

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


Цитата Johny777:
Но неужели "загрузка всего ини в переменную..." не даст почувствовать особую разницу скорости обработки между считыванием строк из переменной и многократным обращением к файлу? »
Дисковый кэш нивелирует разницу
ИМХО

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

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

Отправлено: 14:43, 11-09-2012 | #887


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

Ветеран


Contributor


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

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


Цитата Johny777:
Но неужели "загрузка всего ини в переменную..." не даст почувствовать особую разницу скорости обработки между считыванием строк из переменной и многократным обращением к файлу? »
Johny777, тесты покажут. Например, миллион раз прочитать какое либо значение из ini-файла стандартными средствами и пропарсить файл и миллион раз обратиться к какому-либо члену структуры, засечь время, сравнить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:43, 11-09-2012 | #888


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

Ветеран


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

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


SatHan, можно еще прописать все эти пути в переменную %PATH%
Но темпы желательно переносить в папки 8.3, без пробелов и русских букв. Как системные темпы, так и пользовательские.
Во избежание.

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


Отправлено: 14:45, 11-09-2012 | #889


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

Ветеран


Contributor


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

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


Цитата Johny777:
как теперь считывать значения? »
Цитата Johny777:
неужели он перестал быть ини и теперь нужно искать строку Quit_Dialog_Off=1 целиком »
Johny777, раз это теперь массив записей, то обращение по индексу. Смотри мой пример внимательней, в конце после отработки ParseIniFile идет обращение к элементам массива. Каждый i-ый элемент iFile содержит запись, состоящей из поля Section и поля Entries - массива записей, содержащих 2 поля - Name и Value. Обращение к i-ой секции - iFile[i].Section, к j-ому параметру i-ой секции - iFile[i].Entries[j].Name, к значению j-ого параметра i-ой секции - iFile[i].Entries[j].Value.

Цитата El Sanchez:
тесты покажут. Например, миллион раз »
Потестил, на моей машине обращение к элементам массива примерно в 120 раз быстрее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:34, 11-09-2012 | #890



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




 
Переход