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

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

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

Аватара для 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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 11:48, 10-03-2014

 

Старожил


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

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


Raz3r,
читать дальше »
#include "Modules\botva2.iss"

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[CustomMessages]
rus.Desktop=Soft номер 1
rus.Desktop1=Soft номер 2
[Files]
Source: "InstallFiles\*"; Flags: dontcopy;

[Icons]
Name: "{commondesktop}\Soft номер 1"; Filename: "{app}\MyProg.exe"; Check: Dop;
Name: "{commondesktop}\Soft номер 2"; Filename: "{app}\MyProg.exe"; Check: Dop1;

[code]
var
DopCheck,DopCheck1: HWND;
DopLabel, DopLabel1: TLabel;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Dop: Boolean;
begin
Result:= BtnGetChecked(DopCheck);
end;

procedure DopClick(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then DopLabel.Font.Color:=$0000FF else DopLabel.Font.Color:=$000000;
end;

procedure DopLabelClick(Sender:TObject);
begin
BtnSetChecked(DopCheck, not BtnGetChecked(DopCheck));
DopClick(DopCheck);
end;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Dop1: Boolean;
begin
Result:= BtnGetChecked(DopCheck1);
end;

procedure DopClick1(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then DopLabel1.Font.Color:=$0000FF else DopLabel1.Font.Color:=$000000;
end;

procedure DopLabelClick1(Sender:TObject);
begin
BtnSetChecked(DopCheck1, not BtnGetChecked(DopCheck1));
DopClick1(DopCheck1);
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
Result:=True;
end;

procedure InitializeWizard;
begin
DopCheck:=BtnCreate(WizardForm.SelectDirPage.Handle,ScaleX(10),ScaleY(120),ScaleX(23),ScaleY(23),Exp andConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(DopCheck,BtnClickEventID,WrapBtnCallback(@DopClick,1));
BtnSetCursor(DopCheck,GetSysCursorHandle(32649));
BtnSetChecked(DopCheck,True);

DopLabel := TLabel.Create(WizardForm);
with DopLabel do begin
AutoSize:=False;
SetBounds(ScaleX(35), ScaleY(124), ScaleX(270), ScaleY(17));
OnClick:= @DopLabelClick;
Cursor:= CrHand;
Transparent:=True;
Caption := ExpandConstant('{cm:Desktop}');
Parent := WizardForm.SelectDirPage;
Font.Color:=$0000FF;
end;

DopCheck1:=BtnCreate(WizardForm.SelectDirPage.Handle,ScaleX(10),ScaleY(150),ScaleX(23),ScaleY(23),Ex pandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(DopCheck1,BtnClickEventID,WrapBtnCallback(@DopClick,1));
BtnSetCursor(DopCheck1,GetSysCursorHandle(32649));
BtnSetChecked(DopCheck1,True);

DopLabel1 := TLabel.Create(WizardForm);
with DopLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(35), ScaleY(154), ScaleX(270), ScaleY(17));
OnClick:= @DopLabelClick1;
Cursor:= CrHand;
Transparent:=True;
Caption := ExpandConstant('{cm:Desktop1}');
Parent := WizardForm.SelectDirPage;
Font.Color:=$0000FF;
end;

end;

procedure DeinitializeSetup;
begin
gdipShutdown;
end;

Отправлено: 13:28, 08-08-2014 | #1321



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

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


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


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

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


Всем привет, посоветуйте несколько способов, как правильно использовать скин в установщике (.cjstyles) на юникоде.

Заранее спасибо за ответ.

Последний раз редактировалось Kashtan007, 08-08-2014 в 14:19.


Отправлено: 14:12, 08-08-2014 | #1322


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


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

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


Цитата vint56:
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\Data-A.bin'), ExpandConstant('{app}'), false, '') then break; »
Вставила эту строчку, не получается, именно на этой строчке ошибка. Может где то что подправить нужно? Или может у меня каких dll не хватает? В общем тут http://my-files.ru/2c6x1r пример скрипта игры и все остальное, может подскажите.

Отправлено: 14:56, 08-08-2014 | #1323


Старожил


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

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


Irenis,
http://rghost.ru/57360119
Kashtan007
http://rghost.ru/57361849

Последний раз редактировалось vint56, 08-08-2014 в 17:45.

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

Отправлено: 16:12, 08-08-2014 | #1324


Аватара для habib2302

Ветеран


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

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


И можно сделать так чтобы после нажатия кнопки запускались два деинсталлятора. 1 это деинсталлятор который был создан моим инсталлятором и 2 это деинсталлятор от flash player т.к через реестр не очень
Код: Выделить весь код
procedure RedesignWizardForm;
begin
  with WizardForm.ComponentsList do
  begin
    Height := ScaleY(141);
  end;
end;

var
  ISCustomPage1: TWizardPage;
  NewButton1: TNewButton;
  ResultCode: Integer;
  lpBuff: String;

procedure NewButton1Click(Sender: TObject);
begin
  shellexec('open', ExpandConstant('{tmp}\un.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

function InitializeSetup(): Boolean;
var ResultCode:integer;
begin
ExtractTemporaryFile('un.exe');
 if WizardSilent then
  if FileExists (ExpandConstant('{tmp}\un.exe')) then //имхо, если при установке вы что-то пишете в реестр, то перед удалением неплохо было бы еще проверять наличие в реестре данных об уже установленной версии
   Exec(ExpandConstant('{tmp}\un.exe'), '/uninstall /force', '', SW_SHOW,ewWaitUntilTerminated, ResultCode);
 result:=true;
end;

procedure InitializeWizard;
begin
  RedesignWizardForm;
    NewButton1 := TNewButton.Create(WizardForm);
  with NewButton1 do
  begin
    Parent := WizardForm.SelectComponentsPage;
    Left := ScaleX(0);
    Top := ScaleY(200);
    Width := ScaleX(417);
    Height := ScaleY(33);
    Caption := CustomMessage('NewButton1');
    OnClick := @NewButton1Click;
  end;
end;

-------
Помог? От "Полезное сообщение" не откажусь!!!


Последний раз редактировалось habib2302, 08-08-2014 в 19:24.


Отправлено: 19:19, 08-08-2014 | #1325


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


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

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


vint56, Спасибо за скрипт. Вроде бы разобралась, пока единственный вопрос остался. Во время распаковки ниже процесс бара две надписи: прошло времени и осталось времени. И вот с надписью осталось времени что то не то, вместо минут там вот так "осталось времени: тестовый прогон". И в конце установки тоже надпись "время установки: тестовый прогон". Можно ли это как то исправить?

Отправлено: 21:12, 08-08-2014 | #1326


SHVtYW4=


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

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


Цитата Irenis:
"время установки: тестовый прогон". Можно ли это как то исправить? »
Всё верно. Вы когда только создаёте инсталлятор со всеми вытикающими, то первоночально тестовый прогрон необходим для более точного отображения процентов и времени при установке.
Т.е у вас например всё готово к завершению.
Имеются архивы bin.arc1, bin.arc2, bin.arc3 и т.д.
Делаете первую установку для того, чтоб рядом создался файл records.inf - где будут прописаны значения для архивов "bin.arc1, bin.arc2, bin.arc3 и т.д.".
после того как файл records.inf создался, то для окончательной компиляции раскомментируйте в скрипте #define records.

Если захотите пережать или добавить какое либо содержимое в свои архивы bin.arc1, bin.arc2, bin.arc3 и т.д., то понадобиться опять закомментировать #define records. Сделать тестовый прогон и раскомментировать.




Цитата Irenis:
осталось времени: тестовый прогон »
А в справке к ISDone разве нет?

Я даже процитирую (а то не поверите, скажите там такого нет или не нашли):

ISDone » Описание скрипта:
Цитата Описание скрипта:
Код: Выделить весь код
#define records
определяет будет ли включен в компиляцию файл records.inf. Он служит для автоматического определения процентных соотношений между операциями. Создается в первом прогоне установки, далее включается в установщик раскомментированием выше указанной строки. Более подробную информацию об этом файле и тестовом прогоне см. раздел "Работа с библиотекой";

ISDone » Работа с библиотекой:
Цитата Описание режимов работы библиотеки:
Для осуществения работоспособности библиотеки существует 2 вида определения процентных соотношений между операциями на всем прогрессбаре:
  • Автоматическая расстановка процентных соотношений в операциях.
    При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других.
    Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями.
    Краткая инструкция:
    1. первым делом убедитесь, что в начале скрипта закомментирована строка
      Код: Выделить весь код
      #define records
      (т.е. необходимо поставить точку с запятой в начале этой строки);
    2. компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!
    3. после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку:
      Код: Выделить весь код
      #define records
      Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например:
      Код: Выделить весь код
      #ifdef records
      Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy
      #endif
    4. снова откомпилить проект.
      После этого инсталлер готов к работе.
      При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.

  • Ручная расстановка процентов на каждую операцию.
    При ручной расстановке если в проекте множество операций, все расчеты необходимо производить вручную. Т.е. сумма процентов всех выполненных операций должна равняться 100%, иначе корректного отображения на прогрессбаре не будет.
    Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов значениями процентов, отличными от 0 (числа могут быть дробными).
    При групповой распаковке архивов по маске (типа *.pcf) для операции задается общий процент на все распаковываемые файлы данной командой, а уж каждый из найденных файлов будет разбивать указанный кусок прогрессбара еще на части пропорциональные размерам файлов. Например строка:
    Код: Выделить весь код
    if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), false, '', '', '') then break;
    ...
    распакует все *.arc архивы из {src} в {app}, при чем весь прогрессбар будет поделен на кусочки пропрорциональные размерам архивов. В общем тут все так же как в скрипте распаковки FreeArc.iss и ему подобным. Таким образом при распаковке нескольких архивов одного типа проще пользоваться ручной расстановкой, т.к. отличие расперделения процентов от автоматической будет совсем небольшим, но за то не требуется тестовый проход.

    Вот некоторые правила, которые неоходимо выполнять при ручной расстановке:
    1. сумма процентов учитывая ветвления (использование компонентов, условий) в скрипте должна составлять 100;
    2. у компонентов, для которых возможен выбор только одного из нескольких, должны быть одинаковые значения процентов;
    3. НЕЛЬЗЯ использовать компоненты, которые можно выбирать одновременно с другими в одной группе (например несколько рядом стоящих компонент без флага exclusive), потому что сумма процентов при различном выборе пользователя может отличаться от 100.

  • Примечание
    Стоит упомянуть функцию ISExec, в которой третьим параметром задается время выполнения текущей операции. При автоматической расстановке время на операцию расчитывается приближенное к реальному (при условии, что данная операция не первая, иначе время выполнения берется равное тому, которое было в тестовом проходе). При ручной же расстановке: если машина пользователя быстрее обработает данную операцию, чем расчитано автором инсталла, то прогресс будет немного скачкообразным в моменты переходов между функциями распаковки; если машина пользователя медленнее - прогресс наоборот будет задерживаться между операциями.

Последний раз редактировалось Nordek, 08-08-2014 в 22:18.

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

Отправлено: 21:34, 08-08-2014 | #1327


Старожил


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

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


Irenis, я же в скрипте сделал комментарий справка в архиве называется readme.CHM
; описаний в справке там все описано
;#define records

Отправлено: 21:49, 08-08-2014 | #1328


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


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

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


Nordek, Ясно, спасибо большое. А чтобы не делать эти тестовые прогоны, можно ли в скрипте просто удалить какие то строчки, чтобы надпись "осталось времени" вообще убрать? Ну и в конце чтобы убрать "время установки"?

vint56, Ну да, теперь поняла)) Но все таки хотелось бы как то убрать эти строчки.

Отправлено: 22:04, 08-08-2014 | #1329


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


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

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


vint56, Nordek, Спасибо огромное за участие, спасибо за помощь Конечно, в первую очередь нужно читать инструкции, а потом уже спрашивать, что не понятно. Но когда не знаешь, где в инструкции находится именно то, что тебе нужно, чаще всего до инструкций не доходит дело, а с маленьким ребенком еще сложнее найти время на инструкции Поэтому уж не судите строго, если потом как нибудь еще обращусь за помощью
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:15, 09-08-2014 | #1330



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

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

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




 
Переход