Имя пользователя:
Пароль:
 | Правила  

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

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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для Johny777

Ветеран


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

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


R.i.m.s.k.y., на этапе ssDone WizardForm.RunList уже не существует и соответственно будут ошибки, придётся работать только с переменными
Vstanka, предлагаю такой способ:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Components]
Name: server; Description: Install Server; Types: full custom;

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

type
  RUNLIST_BOOL_COLLECTION = record
    Application: BOOL;
    Server: BOOL;
  end;
  
var
  Run: RUNLIST_BOOL_COLLECTION;

const
  QS_KEY                  = $0001;
  QS_MOUSEMOVE            = $0002;
  QS_MOUSEBUTTON          = $0004;
  QS_POSTMESSAGE          = $0008;
  QS_TIMER                = $0010;
  QS_PAINT                = $0020;
  QS_SENDMESSAGE          = $0040;
  QS_HOTKEY               = $0080;
  QS_MOUSE = (QS_MOUSEMOVE or QS_MOUSEBUTTON);
  QS_INPUT = (QS_MOUSE or QS_KEY);
  QS_ALLEVENTS = (QS_INPUT or QS_POSTMESSAGE or QS_TIMER or QS_PAINT or QS_HOTKEY);
  QS_ALLINPUT = (QS_INPUT or QS_POSTMESSAGE or QS_TIMER or QS_PAINT or QS_HOTKEY or QS_SENDMESSAGE);
  STATUS_TIMEOUT          = $00000102;
  WAIT_TIMEOUT = STATUS_TIMEOUT;

function MsgWaitForMultipleObjects(nCount: DWORD; var pHandles: THandle; fWaitAll: BOOL; dwMilliseconds, dwWakeMask: DWORD): DWORD; external 'MsgWaitForMultipleObjects@user32.dll stdcall';
function CreateEvent(lpEventAttributes: Longint; bManualReset, bInitialState: BOOL; lpName: PChar): THandle; external 'CreateEvent{#A}@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';
function StrFromTimeInterval(var pszOut: Char; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeIntervalA@shlwapi.dll stdcall';

function TicksToTime(Ticks: DWORD): String;
var
    i: Byte;
    arr: array [0..31] of Char;
begin
    for i := 0 to StrFromTimeInterval(arr[0], sizeof(arr), Ticks, 8)-1 do Result := Result + arr[i];
end;

procedure Delay(dwMilliseconds: DWORD; hElapstedTimeInfo: HWND);
var
  dwTick: DWORD;
  hEvent: THandle;
begin
  hEvent := CreateEvent(0, False, False, '');
  try
    dwTick := GetTickCount + dwMilliseconds;
    while (dwMilliseconds > 0) and (MsgWaitForMultipleObjects(1, hEvent, False, dwMilliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      dwMilliseconds := dwTick - GetTickCount;
      if hElapstedTimeInfo <> 0 then SetWindowText(hElapstedTimeInfo, 'запуск приложения через' + TicksToTime(dwMilliseconds));
    end;
  finally
    CloseHandle(hEvent);
  end;
end;



procedure RunListOnClickCheck(Sender: TObject);
begin
  with WizardForm.RunList do if (Items.IndexOf('запуск приложения') <> -1) and (Items.IndexOf('запуск сервера БД') <> -1) then
  begin
    ItemEnabled[Items.IndexOf('запуск приложения')] := Checked[Items.IndexOf('запуск сервера БД')];
    Refresh;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
  WaitingForm: TForm;
  StaticText: TNewStaticText;
begin
  if CurStep = ssDone then
  begin
    if Run.Server then Exec(ExpandConstant('{app}\server.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewNoWait, ErrorCode);
    if Run.Application then
    begin
      WaitingForm := TForm.Create(nil);
      with WaitingForm do
      begin
        ClientWidth := ScaleX(200);
        ClientHeight := ScaleY(50);
        Position := PoscreenCenter;
        BorderStyle := bsDialog;
        Caption := 'Waiting';
        StaticText := TNewStaticText.Create(WaitingForm)
        with StaticText do
        begin
          Parent := WaitingForm;
          SetBounds(ScaleX(10), ScaleY(20), ScaleX(180), ScaleY(20));
        end;
        Show;
        Delay(20000, StaticText.Handle);
      end;      
      WaitingForm.Free;
      Exec(ExpandConstant('{app}\hl.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewNoWait, ErrorCode);
    end;
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if (CurPageID = wpFinished) then with WizardForm.RunList do 
  begin
    if (Items.IndexOf('запуск приложения') <> -1) and (Items.IndexOf('запуск сервера БД') <> -1) then
    begin
      Run.Server := Checked[Items.IndexOf('запуск сервера БД')];
      Run.Application := ItemEnabled[Items.IndexOf('запуск приложения')] and Checked[Items.IndexOf('запуск приложения')];
      Items.Delete(Items.IndexOf('запуск сервера БД'));
      Items.Delete(Items.IndexOf('запуск приложения'));
      Result := True;
    end;
  end else Result := True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpFinished) and IsComponentSelected('server') then with WizardForm.RunList do
  begin
    AddCheckBox('запуск сервера БД', '', 0, True, True, False, False, nil);
    AddCheckBox('запуск приложения', '', 0, True, True, False, False, nil);
    WizardForm.RunList.OnClickCheck := @RunListOnClickCheck;
    Refresh;
    Visible := True;
  end;
end;


к тому же заметил аномалию: если вручную добавить айтемы в RunList и установить в них галки, то при разрушении WizardForm ошибки, что их нет, поэтому их нужно удалить до деинициализации

Отправлено: 15:11, 19-01-2013 | #1561



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

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


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

Ветеран


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

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


Цитата Johny777:
на этапе ssDone WizardForm.RunList уже не существует и соответственно будут ошибки »
вообще-то это копипаста с моего заведомо рабочего кода
спецом проверил еще раз - работает

____________

Вопросик - чего при использовании bass.dll установщик падает с ошибкой в dsound.dll?
Код: Выделить весь код
Имя сбойного модуля: dsound.dll, версия: 6.1.7600.16385, отметка времени 0x4a5bd9fd
Код исключения: 0xc0000005
Смещение ошибки: 0x00008d5f
Идентификатор сбойного процесса: 0xbc0
Время запуска сбойного приложения: 0x01cdf61ca4396b84
Путь сбойного приложения: r:\Temp\is-UK9B7.tmp\setup.tmp
Путь сбойного модуля: C:\Windows\system32\dsound.dll
Код отчета: e7c10c04-620f-11e2-b72e-d43a4e0c59f8

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


Последний раз редактировалось R.i.m.s.k.y., 19-01-2013 в 15:24.


Отправлено: 15:15, 19-01-2013 | #1562


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

Ветеран


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

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


Цитата Johny777:
к тому же заметил аномалию: если вручную добавить айтемы в RunList и установить в них галки, то при разрушении WizardForm ошибки, что их нет, поэтому их нужно удалить до деинициализации »
блин какие-то разные у нас инно, ничего подобного у меня нет
Пользуюсь инноультра какой-то лохматой версии, инно компилер 5.4.2.ее2(а), билд 110319

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

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

Отправлено: 16:21, 19-01-2013 | #1563


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

Ветеран


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

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


еще вопросил по bass.dll - какие форматы он умеет?
в описании чказано xm/mod, запускаю - тишина, хотя мр3 работает

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


Отправлено: 20:57, 19-01-2013 | #1564


Ветеран


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

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


подскажите как правильно распаковывать файлы precomp'a,а то я запаковал а они не распаковываются через скрипт isdone,пишет не найдены файлы precomp

Отправлено: 00:03, 20-01-2013 | #1565


Аватара для Mailchik

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


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

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


Цитата R.i.m.s.k.y.:
еще вопросил по bass.dll - какие форматы он умеет? »
WAV, AIFF, MP3, MP2, MP1, OGG, MOD, IT, XM, S3M.
Цитата R.i.m.s.k.y.:
в описании чказано xm/mod, запускаю - тишина, хотя мр3 работает »
надо через другую функцию запускать.
вот пример накидал для xm: ссылка
Цитата insombia:
подскажите как правильно распаковывать файлы precomp'a,а то я запаковал а они не распаковываются через скрипт isdone,пишет не найдены файлы precomp »
прекомп не пакует, он разжимает.. лучше его не использовать, пока не поймете для чего он.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:27, 20-01-2013 | #1566


Ветеран


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

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


Mailchik а srep как распаковать?

Отправлено: 10:43, 20-01-2013 | #1567


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

Ветеран


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

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


Цитата insombia:
а srep как распаковать »
srep.exe -d setup-1.rep setup-1.bin

Поставил на установщик скин через ISSkinEx.dll, но вот заковыка - самое начальное окно выбора языка установщика не "скинится".
Не сутба или есть способ?

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

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

Отправлено: 10:50, 20-01-2013 | #1568


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


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

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


А как в модуле FreeArc сделать запрос второго диска?

Отправлено: 16:33, 20-01-2013 | #1569


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


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

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


Как извлечь правельно скрипт из секциєю CODE(або только секцию CODE), с из исталяцийки ?

Отправлено: 17:15, 20-01-2013 | #1570



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




 
Переход