Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (23-04-2007 18:02): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

   

haav



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

 
 
Это мощное средство для создания установочных пакетов [дистрибутивов] программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки. Можно легко самим создавать диалоги, используя спец. дизайнер. И всё это абсолютно бесплатно! По сравнению с NullSoft [основной конкурент на бесплатной ниве] мне albel понравилась более интуитивно-понятная структура скрипта, простота в настройке.  
 
Последний релиз: 5.1.11 [1 Марта 2007 года]
История версий | скачать  
 
Русификатор от NightW0lf для версии 5.1.11  
Скачать | зеркало
 
Русская справка к версиям 5.0.xx
Скачать | зеркало || cкачать в .chm формате
И снова BagIra на высоте
 
Руководство по расширенным возможностям Inno Setup 5 [не для чайников] от Kindly
[3 версия]  
Скачать | зеркало
[4 версия]  
Скачать | зеркало
[5 версия]  
Скачать | зеркало
 
Inno Setup Extensions Knowledge Base  
Скачать | зеркало
 
Примечание: начиная с версии 5.1.10 в Inno Setup при использовании в инсталляторе фонового изображения формата BMP стало глючить возможность растягивания картинки на весь экран - чтобы это исправить добавьте этот код.
Если вы захотите использовать метод проверки внешнего файла через сумму MD5 [который описан в 5 версии руководства по программированию в Inno Setup] для запуска инсталлятора то вам понадобится калькулятор суммы MD5, калькулятор сумм MD5, SHA-256, CRC32. Если вы хотите узнать какие ключи в реестр вносит та или иная программа [или игра] то Вам понадобится RegShot.



Дополнительные утилиты для Inno Setup



ISTool
 
www.istool.org
 
Последний релиз: 5.1.8 [18 Октября 2006 года] New
Скачать | зеркало  
[как сказано в описании изменений, добавлена поддержка новых директив 5.1.8]
 
Русификатор
Скачать | зеркало


 
Распаковщик установок, сделанных с помощью Inno Setup. При распаковке извлекаются  ресурсы и скрипт установки [немного усечённый]. Возможно подключение к TotalCommander или FAR с помощью MultiArc плагинов.
 
Поддерживает распаковку инсталляторов, сделанных с помощью Inno Setup начиная с версии 3.0.0-beta по 5.1.10
 
Последний релиз: 0.19
Скачать | зеркало


 
Удобная оболочка для облегчения написания скриптов установки для INNO SETUP. Обладает некоторыми полезными функциями, которых нет ни у самого INNO, ни у ISTool.
 
Последний релиз: 5.1.6.9 [09 Июль 2006 года]
Скачать 4.2 мб | обновление 3.1 мб
 
Русификатор от GloThin
Скачать с сайта GloThin | Зеркало | Зеркало | зеркало
Пароль: ruboard
Примечание: офф. сайт косо отображается в Oper`е.
 
Новое название проекта на сайте, похоже произошла замена ScriptMaker на:
 
Inno Script Generator

Последний релиз: 1.02.5 [02 Апреля 2007 года]
Скачать | обновление
Примечание: обновление ставится только на Inno Setup Quickstartpack 5.1.11.

Всего записей: 67 | Зарегистр. 11-12-2001 | Отправлено: 15:23 09-10-2002 | Исправлено: NightW0lf, 15:16 15-04-2007
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Genri
Уже лучше, правда неособо, сначала несколько раз пишет невозможно найти файл (я снял флаг)
(когда code:CurrentDir|{#i}} равно ''), затем распаковывает всё таки нужный файл, и после мноооооооооооого раз пишет опять ошибку list of index out of bouunds. Осталось немножко додумать....

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 17:33 28-12-2006 | Исправлено: maxdddca123, 17:35 28-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробуй следующее:
[Run]
#sub RunFile
Filename: "{code:RunDir|{#i}}\ExtForms\Rp06q3.grp\akciz5.exe"; StatusMsg: Распаковка форм...; Flags: skipifdoesntexist
#endsub
 
#for {i = 0; i < MaxTarget; i++} RunFile
 
а в секцию Code добавь функцию:
 
function RunDir(Param: string): string;
begin
 if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
    Page.CheckListBox.Checked[StrToInt(Param)] then
    Result:= Page.CheckListBox.ItemCaption[StrToInt(Param)]
  else Result:= '';
end;
 
... и постарайся найти время, чтобы разобраться в том, что все это значит. Потом легче будет.
 
 
Добавлено:

Цитата:
(я снял флаг) (когда code:CurrentDir|{#i}} равно '')
-- это не понял. Функцию CurrentDir менять не надо. А то ты так наменяешь, что перестанет работать даже то, что сейчас работает.
 
 
Добавлено:
Ну а для окончательной красоты, добавь следующее:
1. В начале секции Code, пропиши еще одну переменную:
ProgressBar: TNewProgressBar;
 
2. Секцию Run измени на следующее:
[Run]
#sub RunFile
Filename: "{code:RunDir|{#i}}\ExtForms\Rp06q3.grp\akciz5.exe"; StatusMsg: Распаковка форм {code:RunDir|{#i}}; BeforeInstall: ChangeProgress ; Flags: skipifdoesntexist
#endsub
 
#for {i = 0; i < MaxTarget; i++} RunFile
 
3. И в секцию Code добавь две процедуры:
Код:
 
procedure ChangeProgress();
begin
  ProgressBar.Position:= ProgressBar.Position + 1;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
var
  CheckedCount, i: integer;
begin
if CurStep = ssInstall then
  begin
    CheckedCount:= 0;
    for i:= 0 to Page.CheckListBox.Items.Count - 1 do
      begin
        if Page.CheckListBox.Checked[i] then
          CheckedCount:= CheckedCount + 1;
      end;
    with WizardForm.ProgressGauge do
      begin
        ProgressBar := TNewProgressBar.Create(WizardForm);
        ProgressBar.Left := Left;
        ProgressBar.Top := Top + Height + ScaleY(8);
        ProgressBar.Width := Width;
        ProgressBar.Height := Height;
        ProgressBar.Parent := WizardForm.InstallingPage;
        ProgressBar.Max := CheckedCount;
        ProgressBar.Position := 0;
      end;
  end;
end;
 

Теперь при запуске файлов из секции Run, пользователь будет видеть прогресс установки. Что при 150 запусках очень актуально.
Спасибо за внимание

Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 17:56 28-12-2006 | Исправлено: Genri, 17:57 28-12-2006
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо, но с Filename: "{code:RunDir|{#i}} файл опять не запускается (всегда берёт Result:= ''), а с CurrentDir|{#i}} запускается с ошибками как я выше описывал.... Я расстроился, думал уж получится

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 21:22 28-12-2006 | Исправлено: maxdddca123, 21:31 28-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxdddca123 -- давай опять весь код в ПМ

Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 21:29 28-12-2006
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Послал. Жду вашей реакции магистр

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 21:36 28-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxdddca123 -- Проблема в том, что я все примеры давал из расчета, что в CheckListBox пути к базам сохраняются в Caption, а у тебя они сохраняются в SubItem. Вобщем-то можно и так и так (влияет только на отображение в списке). Но тогда соответствующим образом надо поменять и код. Подробнее в ПМ.

Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 00:57 29-12-2006
GRom V

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
/feandy/
/так сделай проверку  
 
if FileExists('backup.reg') then  
  regedit /s backup.reg/
 
У меня в конце инсталляции запускается прога, после ее закрытия запускается ват-ник,в котором такие строчки:
regedit /s UninstallRegInfo.reg
regedit /s backup.reg
Erase backup.reg
 
Какой указать параметр чтобы вслучае отсуствия backup.reg ошибка не выскакивала???
 
Добавлено:
if FileExists('backup.reg') then  
  regedit /s backup.reg/
 
не работает эта тема
 
Добавлено:
Все!!! надо было так:
if Exist backup.reg regedit /s backup.reg

Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 03:01 29-12-2006
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Genri
Да, виновать Эт всё предновогодние отмечания
Спасибо, а ещё подскажи такой ньюансик:
у меня распаковываются много ехе файлов, и после распаковки надо поочерёдно, что бы запустились все. Можно конечно каждый файл поотдельности прописать, но это неудобно. Можно ли сделать так, что бы это одной строкой было прописано.  
Вот так не работает если в  [Run] прописать:  
 
Filename: {code:RunDir|{#i}}\ExtForms\Rp06q3.grp\*.exe;
 
Добавлено:
Даже есть ещё очень красивый вариан: есть текстовый файл с названиями всех екзешников:
// Отчетность за 4 квартал 2006 года;
AKCIZ.EXE;Акцизы
AKCIZN3.EXE;Акцизы на алкогольную продукцию, реализуемую оптом
AKCIZ5.EXE;Акцизы на нефтепродукты
AKCIZ9.EXE;Акцизы на подакцизное минеральное сырье
AKCIZN7.EXE;Акцизы на табачные изделия
BUH.EXE;Бухгалтерская отчетность
вот если бы отсюда брать их имена и подставлять в RUN былл бы просто мегаааа красиво. Можно так сделать?
 
Добавлено:
Думаю тут пригодится ф-ция LoadStringsFromFile, но вот как отделить название файла от остальной строки ума не приложу ? (понятно что надо брать все символы до ; )

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 07:05 29-12-2006 | Исправлено: maxdddca123, 07:53 29-12-2006
omals

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 maxdddca123

Цитата:
Думаю тут пригодится ф-ция LoadStringsFromFile, но вот как отделить название файла от остальной строки ума не приложу ? (понятно что надо брать все символы до ; )

а може проще просто текстовый файл подредактировать?
 
ну если не хочеться то мона так:
 
var
  ArrOfFiles:TArrayOfString
  I, J: integer;
  tmpStr:STRING;
begin
 
if LoadStringsFromFile('путь с именем к вашему текстовому файлу, например: {app}\exelist.txt', ArrOfFiles) then
  begin
    for I:=0 to GetArrayLength(ArrOfFiles)-1 do
    begin
      J:=Pos(';', ArrOfFiles[I]);
      tmpStr:=Copy(ArrOfFiles[I], 0, J-1);
      MsgBox(tmpStr, mbError, MB_OK);
      //а можноArrOfFiles[I]:= tmpStr -- в результате будет масив со всеми .exe файлами
    end;
  end
else MsgBox(невозможно открыть файл', mbError, MB_OK);
 
вроде так (ну суть точно такая

Всего записей: 110 | Зарегистр. 04-12-2006 | Отправлено: 10:48 29-12-2006
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
omals
Thx, попробую.
 
Как правильно использовать function FileCopy, если мне нужно все файлы из одной дирректории скопировать в другую... ?
 
Ох уж эти скрипты ((((

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 11:39 29-12-2006 | Исправлено: maxdddca123, 11:53 29-12-2006
feandy



Пиво тоже компонента
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxdddca123
Например так
 
var
  FindRec: TFindRec;
 
 
  if FindFirst('SourceDir\*', FindRec) then begin
    try
      repeat
        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
          FileCopy('SourceDir\'+FindRec.Name, 'DestDir\'+FindRec.Name, False);
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;

Всего записей: 5200 | Зарегистр. 15-02-2002 | Отправлено: 12:30 29-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Итак, попробуем резюмировать все, что мы тут совместными усилиями построили.
 
Задача: распаковать файлы в папки, кол-во которых и пути к ним, на этапе компиляции неизвестно. Пути выбираются пользователем из списка, который строится на основании информации из реестра на машине пользователя. После распаковки, в каждой выбранной папке, запускается определенный файл. После отработки запуска всех файлов, установка считается завершенной.
 
Вариант решения можно посмотреть здесь
Слегка подправил (добавлена кнопка <Выбрать все>)  

Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 12:46 29-12-2006 | Исправлено: Genri, 14:17 29-12-2006
omals

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Итак, попробуем резюмировать все, что мы тут совместными усилиями построили.  

угу но токо я ешо для разных языков (если нужно конечно же) таки сделал бы:
Page := CreateInputOptionPage(wpWelcome,  
  ExpandConstant('{cm:WizardSelectComponents}'), ExpandConstant('{cm:SelectComponentsDesc}'),  
 ExpandConstant('{cm:SelectComponentsLabel2}'),  
  False, True);  
 
ну или шото похожее
можно свои мессаги прописать для всех языков, а по дефолту брать какой определиш (ну на случай если для какогото яз1ка месаги не прописаны)

Всего записей: 110 | Зарегистр. 04-12-2006 | Отправлено: 15:38 29-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
omals -- любую программу можно улучшать до бесконечности В скрипте у maxdddca123 все еще навороченней. Но я намеренно убрал оттуда некоторые фишки, чтобы акцентировать внимание на решении основной задачи (распаковать файлы в папки, кол-во которых и пути к ним, на этапе компиляции неизвестно).
Это только пример. Адаптация и тюнинг, это на усмотрение того, кто будет использовать.
 

Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 15:58 29-12-2006
omals

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Genri

Цитата:
omals -- любую программу можно улучшать до бесконечности  

согласен.
просто у меня почти все инсталяторы для множества языков - больная тема ...
потому и обратил внимание

Всего записей: 110 | Зарегистр. 04-12-2006 | Отправлено: 16:12 29-12-2006
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Genri

Цитата:
Но я намеренно убрал оттуда некоторые фишки

Какие это ты фишки убрал ?

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 16:32 29-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxdddca123
BeveledLabel, URLLabel, InitializeSetup, AboutButtonOnClick, BackgroundBitmapImage, BackgroundBitmapText, почти всю секцию [Setup] и все остальное, что не относилось к указанной задаче.
Надеюсь, финансовых претензий, ты мне предъявлять не собираешься?

Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 16:45 29-12-2006
maxdddca123

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Genri

Цитата:
Надеюсь, финансовых претензий, ты мне предъявлять не собираешься?  

Нет. Я вроде закончил со своим инсталлятором, надо конечно вылизать, но это после праздников. Земной поклон Вам, и с наступающими праздниками всех !!! До встречи в новом году. Сделаем самые крутые инсталляторы )))))))))))

Всего записей: 211 | Зарегистр. 14-12-2006 | Отправлено: 17:27 29-12-2006
NightW0lf



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
Такой вопрос: на странице выбора директории установки приложения в инсталляторе созданном на Inno Setup 5.1.9 (да и других) при нажатии на кнопку обзор (browse) отсутствует кнопка "Создать папку"? А то получается, если надо установить в папку, которой вообще нет придется ее вручную прописывать чтобы она создалась (а это НЕ очень удабно)!
 
P.S.: Хотя в некоторых инсталляторах на Inno Setup 5.1.9 есть эта кнопка ("Создать папку") к примеру русификатор для "Warhammer - Mark of Chaos" с ZoneOfGames.ru.
 
Спасибо за внимание!

Всего записей: 479 | Зарегистр. 08-11-2006 | Отправлено: 01:16 30-12-2006 | Исправлено: NightW0lf, 01:17 30-12-2006
Genri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NightW0lf -- Из хелпа:
Цитата:
function BrowseForFolder(const Prompt: String; var Directory: String; const NewFolderButton: Boolean): Boolean;  
Описание:
Отображает диалоговое окно, в котором пользователь может выбрать папку; первоначально будет выбрана папка, заданная в  Directory. Если NewFolderButton=True, пользователь может создать новую папку. Возвращает True если пользователь выбрал папку, иначе False. Выбранная папка присваивается строковой переменной Directory.
 
Замечания:
Не все версии Windows поддерживают параметр NewFolderButton равный False и все равно его отображают.



Код:
 
procedure DirOnClick(Sender: TObject);
var
  res: Boolean;
  UserSelectDir: String;
begin
  UserSelectDir:= WizardForm.DirEdit.Text;
  res:= BrowseForFolder('Веберите папку для установки', UserSelectDir, True);
  if res then
    begin
      WizardForm.DirEdit.Text:= UserSelectDir;
    end;
end;
 
procedure InitializeWizard();
begin // эта строка в исходном сообщении была пропущена!!!
  WizardForm.DirBrowseButton.OnClick:= @DirOnClick;
end;


Всего записей: 872 | Зарегистр. 06-09-2003 | Отправлено: 01:31 30-12-2006 | Исправлено: Genri, 01:03 31-12-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (23-04-2007 18:02): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru