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

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

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

Ветеран


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


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

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


Изменения
Автор: Serega
Дата: 13-08-2011
Вложения
Тип файла: 7z Inno Setup [все вопросы] часть 1.7z
(1.34 Mb, 900 просмотров)
Тип файла: 7z Inno Setup [все вопросы] часть 2.7z
(3.12 Mb, 798 просмотров)
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


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

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 00:28, 04-11-2010

 

Ветеран


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

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


Цитата vahe-91:
пишет invalid number of parameters »
Правильно, вы посмотрите в Справке описание этой функции, ну или хотя бы сделали по аналогии, у вас же выше написана эта же функция...
Должно быть так:
Код: Выделить весь код
  Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n);
И совет, привыкайте сразу к форматированию кода, вам самому читать будет легче.
Цитата vahe-91:
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe end; »
В этой строке вы загнали end; в комментирование, т.е. переведите его на следующую строку.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

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

Отправлено: 16:40, 08-01-2011 | #421



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

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


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


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

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


Цитата Serega:
В этой строке вы загнали end; в комментирование, т.е. переведите его на следующую строку »
когда жму 'вставить тег [_CODE]' и вставляю текст, он весь скрипт пишет на одной строке, поэтому и так получилось

Спасибо тебе

Отправлено: 17:08, 08-01-2011 | #422


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


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

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


Serega,

решил сделать так, но после окончания процесса setup.exe выдает ошибку runtime error (at 127:28) acces violation at address0044694c. read of address 00000000

И еще в коде можно поставить setup.exe флаг hidewizard ?

Код: Выделить весь код
procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssInstall then begin
        StartInstall:= GetTickCount    {время начала извлечения файлов}
        WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID);    {установка SendMessage хука}
        TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4));    {установка таймера}
        if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
    end;
    if CurStep = ssPostInstall then
    begin
        StartInstall:= GetTickCount    {время начала распаковки}
        UnPackError:= UnPack('{#Archives}')
        if UnPackError <> 0 then begin // Error occured, uninstall it then
            if not {#isFalse(SetupSetting("Uninstallable"))} then  // деинсталляция разрешёна
                Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    // откат установки из-за ошибки unarc.dll
            WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
        end else  begin
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
            Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n)   end;
end;
end;

Последний раз редактировалось vahe-91, 08-01-2011 в 21:05.


Отправлено: 19:36, 08-01-2011 | #423


Ветеран


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

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


Цитата vahe-91:
после окончания процесса setup.exe выдает ошибку runtime error (at 127:28) acces violation »
Выдаёт ошибку setup.exe, это ваш инсталлятор или тот, который вы запускаете?
Без запуска стороннего setup.exe ошибка есть?
Ошибка acces violation говорит о том, что идёт обращение к объекту, которого нет, т.е. он ещё не создан или уже разрушен. Чтоб было понятней:
Пример

Код: Выделить весь код
procedure InitializeWizard();
var
  lbl: TLabel;
begin
  // создаём контрол
  lbl := TLabel.Create(WizardForm);
  with lbl do
    begin
      Parent := WizardForm;
      AutoSize := True;
      Left := ScaleX(20);
      Top := ScaleY(330);
    end;
  lbl.Free; // разрушаем контрол
  // при попытке обращения к контролу после разрушения,
  lbl.Caption := 'Пример...'; // получаем acces violation в этой строке
end;

Цитата vahe-91:
можно поставить setup.exe флаг hidewizard ? »
Подробней объясните, что именно вы хотите сделать?

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 01:00, 09-01-2011 | #424


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


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

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


Цитата Serega:
Выдаёт ошибку setup.exe, это ваш инсталлятор или тот, который вы запускаете? »
мой инсталятор Инно. Без запуска setup.exe все нормально

Цитата Serega:
Подробней объясните, что именно вы хотите сделать? »
чтобы во время выполнения setup.exe мастер установки был скрыт

Отправлено: 12:07, 09-01-2011 | #425


Аватара для nik1967

Старожил


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

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


Цитата vahe-91:
чтобы во время выполнения setup.exe мастер установки был скрыт »
А так:
Код: Выделить весь код
WizardForm.Hide;
   Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n);
WizardForm.Show;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 09-01-2011 | #426


Ветеран


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

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


Цитата vahe-91:
Без запуска setup.exe все нормально »
Тогда эта ошибка инсталлятора, который вы запускаете, может ему не нравиться, что вы запускаете его скрыто, попробуйте запустить его с параметром SW_SHOWNORMAL.
Хотя я больше чем уверен, что без этого инсталлятора вы не пробовали запускать и эта ошибка у вас в скрипте.
Запустите инсталляцию прямо из редактора и в момент ошибки, в самом скрипте у вас будет выделена строка, на которой произошла ошибка.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 14:47, 09-01-2011 | #427


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


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

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


nik1967,
во время выполнения setup.exe мастер скрывается, но по окончания получаю прежную ошибку и мастер не восстанавливается

Цитата Serega:
Тогда эта ошибка инсталлятора, который вы запускаете, может ему не нравиться, что вы запускаете его скрыто, попробуйте запустить его с параметром SW_SHOWNORMAL »
не помогает

Цитата Serega:
Хотя я больше чем уверен, что без этого инсталлятора вы не пробовали запускать и эта ошибка у вас в скрипте »
пробовал, ошибок нету

Цитата Serega:
Запустите инсталляцию прямо из редактора и в момент ошибки, в самом скрипте у вас будет выделена строка, на которой произошла ошибка »
вот что получается



line 344 out of range

Код: Выделить весь код
 if (Status.stage = cm('ArcTitle')) and (GetArrayLength(Arcs) > 0) then begin
    ExtractFile.Caption:= FmtMessage(cm('ArcInfo'), [IntToStr(ArcInd+1), IntToStr(GetArrayLength(Arcs)),    // это строка 344
ByteOrTB(Arcs[ArcInd].Size, true), Format('%.0n', [Status.mb/(Arcs[ArcInd].Size/oneMB)*100]), ByteOrTB(Status.allsize, true)])
    ProgressBar.Position:= round(ProgressBar.Max * Status.mb/trunc(Arcs[ArcInd].Size/oneMB))
  end;

Отправлено: 17:54, 09-01-2011 | #428


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


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

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


Доброго вечера
Задачка
По завершении установки необходимо появление диалогового окна, с выбором ник нейма
Ник в последствии должен быть прописан в определенной части файла *.ini
Помогите если не трудно.

Отправлено: 18:33, 09-01-2011 | #429


Ветеран


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

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


Цитата vahe-91:
пробовал, ошибок нету »
Чудес не бывает
Цитата vahe-91:
line 344 out of range »
Ошибка out of range, означает выход за пределы, эта ошибка связана с выходом за пределы массива или множества.
Следовательно внимательно посмотрите, что вы ещё меняете при добавлении запуска другого инсталлятора.
Так же попробуйте, закоментируйте запуск стороннего инсталлятора в скрипте и запустите также через редактор.

Цитата e2e44:
необходимо появление диалогового окна, с выбором ник нейма »
Пример

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[UninstallDelete]
; при деинсталляции не забываем удалить config.ini
Type: files; Name: {app}\config.ini

[Code]
var
  Form: TSetupForm;

procedure ButtonClick(Sender: TObject);
begin
  Form.Close;
end;

function GetNikName: string;
var
  edt: TEdit;
begin
  try
    Form := CreateCustomForm;
    with Form do
      begin
        ClientWidth :=  ScaleX(200);
        ClientHeight := ScaleY(100);
        Center;
        Caption := 'Ввод данных...';
      end;
    with TLabel.Create(Form) do
      begin
        Parent := Form;
        AutoSize := True;
        Left := ScaleX(12);
        Top := ScaleY(12);
        Font.Size := 9;
        Caption := 'Введите свой Логин:';
      end;
    edt := TEdit.Create(Form);
    with edt do
      begin
        Parent := Form;
        SetBounds(ScaleX(10), ScaleY(35), Form.ClientWidth - ScaleX(20), ScaleY(17));
      end;
    with TButton.Create(Form) do
      begin
        Parent := Form;
        SetBounds((Form.Width - Width) div 2, ScaleY(65), ScaleX(75), ScaleY(23));
        Caption := 'OK';
        OnClick := @ButtonClick;
      end;
    Form.ShowModal;
  finally
    Result := edt.Text;
    Form.Free;
    Form := nil;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    SetIniString('Section', 'Key', GetNikName, ExpandConstant('{app}\config.ini'))
end;

Описание всех функций, можете найти в Справке.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

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

Отправлено: 19:39, 09-01-2011 | #430



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход