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

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

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

Ветеран


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


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

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


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • 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.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

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


Отправлено: 22:06, 23-08-2009

 

Аватара для A1EXXX

Старожил


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

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


Serega, ещё один скромный вопросик: как только начинается распаковка, прогресс-бар сразу заполняется почти наполовину , а до этого заполнение
было в два раза меньше
Это поправимо?


Кажется разобрался
Цитата:
else
begin
SecondProgressBar.Position:= SecondProgressBar.Position + 3;
WaitProgUntilTerminated;
end;
end;
здесь +3 заменил на +1

Последний раз редактировалось A1EXXX, 25-11-2009 в 01:53.


Отправлено: 00:43, 25-11-2009 | #491



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

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


Аватара для A1EXXX

Старожил


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

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


Serega, разобрался, да не совсем ))) Начинается распаковка с приемлемым заполнением, а заполняется дальше просто ужасно.... Не знаю, как тут разрулить... И ещё: можно сделать так, чтобы при нажатии "Отмена" в инсталле надпись менялась, типа "Откат изменений" или нечто подобное??? А то создаётся впечатление, что установщик завис
Пробовал добавить WizardForm.StatusLabel.Caption:= 'Откат изменений...'; после DelTree(ExpandConstant('{app}'), True, True, True); - если много распаковано, - не работает

Отправлено: 16:46, 25-11-2009 | #492


Ветеран


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

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


Цитата A1EXXX:
разобрался, да не совсем ))) »
Переделал вам скрипт, с учётом расширенной версии. Прогрессбар при распаковке, показывает реальные значения, попробуйте:
Пример
Код: Выделить весь код
#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

[UninstallDelete]
Name: {app}; Type: filesandordirs

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

[Files]
; измените на своё место расположение dll'ки, у меня она расположена
; C:\Program Files\Inno Setup 5\Libraries\*
Source: C:\Program Files\Inno Setup 5\Libraries\ISTask.dll; Flags: dontcopy
Source: C:\Program Files\FreeArc\bin\Arc.exe; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[Code]
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall delayload setuponly';
function KillTaskA(ExeFileName: string): Integer;
  external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
  external 'WinExec@kernel32.dll stdcall';

////////////////////////////////////////////////////////////////////////////////////
const
  CountArc = 4; // количество архивов

var
  SecondProgressBar: TNewProgressBar;
  ExtractAllArc: Boolean;
  StartPos: Integer;
  
procedure InitializeWizard();
begin
  WizardForm.FileNameLabel.Hide;
  WizardForm.StatusLabel.Top:= ScaleY(81);
  WizardForm.StatusLabel.Width:= WizardForm.InnerNotebook.Width;
  WizardForm.StatusLabel.Width:= ScaleX(262);
  WizardForm.ProgressGauge.Top:= ScaleY(100);
  WizardForm.ProgressGauge.Left:= ScaleX(155);
  WizardForm.ProgressGauge.Width:= ScaleX(262);

  SecondProgressBar:= TNewProgressBar.Create(WizardForm);
  with SecondProgressBar do
    begin
      Parent:= WizardForm.InstallingPage;
      SetBounds(0, 100, 150, 21);
      Min:= 0;
      Max:= 100;
      Position:= 0;
    end;
end;

procedure ParserLog;
var
  in_File, out_File, S, S1: string;
  i, j, n: Integer;
begin
  in_File := ExpandConstant('{tmp}\in_log');
  out_File := ExpandConstant('{tmp}\out_log');
//  ProgressBar.Show;
//  ProgressLabel.Show;
  // если файла нет, то подождём... ;)
  if FileExists(in_File) = False then
    repeat
      Application.ProcessMessages; // необходима расширенная версия от Restools
      n:= n + 1;
      Sleep(500); // ждём полсекунды и повторяем цикл
    until (FileExists(in_File) = True) or (n = 10); // максимально повторяем цикл 10 раз, что составит 5 секунд...
  // если всё же файла нет, то выходим
  if FileExists(in_File) = False then Exit;
  // если файл существует, то обрабатываем его
  repeat
    FileCopy(in_File, out_File, False); // копируем файл, чтоб можно было открыть out_File для чтения
    LoadStringFromFile(out_File, S); // если попытаться загрузить in_File, то ничего не выйдет, пока в него пишет Arc.exe...
    Application.ProcessMessages; // необходима расширенная версия от Restools
    if Pos('%', S) > 0 then
      begin
        S1:= Copy(S, Length(S) - 4, (Length(S) - 2) - (Length(S) - 4));
        StringChange(S1, ' ', ''); // удаляем пробелы
        for i:= 0 to 100 do
         if S1 = IntToStr(i) then
          begin
            j:= StrToInt(S1);
            SecondProgressBar.Position:= StartPos + (j/CountArc);
            WizardForm.StatusLabel.Caption:= 'Распаковка файлов, ждите...  ' +
              IntToStr(SecondProgressBar.Position)+'%';
            Application.ProcessMessages; // необходима расширенная версия от Restools
          end;
      end;
  until (Pos('Extracted', S) or Pos('ERROR', S)) > 0;
  StartPos:= SecondProgressBar.Position;
  // удаляем временные файлы
  DelayDeleteFile(in_File, 4);
  DelayDeleteFile(out_File, 4);
end;

procedure ExtractArc(arcArchName, arcDestDir:string);
var
  ResultCode: Integer;
begin
//  WizardForm.StatusLabel.Caption:= SetupMessage(msgStatusExtractFiles);
  // запускаем файл
  ResultCode:= WinExec('cmd.exe /c ' + AddQuotes(ExpandConstant('{tmp}\arc.exe')) + ' x ' +
    AddQuotes(ExpandConstant(arcArchName)) + ' -y -s2 -dp' +
      AddQuotes(ExpandConstant(arcDestDir)) + ' >' +
        AddQuotes(ExpandConstant('{tmp}\in_log')), SW_HIDE);

  if (ResultCode < 33) then
    begin
      MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
      SecondProgressBar.Position:= 0;
      if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe'); // теоретически не нужно, но всё же...
      if DirExists(ExpandConstant('{app}')) then DelTree(ExpandConstant('{app}'), True, True, True);
      Abort;
    end
  else ParserLog;
end;

procedure CloseSetup;
begin
  WizardForm.StatusLabel.Caption:= 'Откат изменений...';
  SecondProgressBar.Position:= 0;
  if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe');
  DelTree(ExpandConstant('{app}'), True, True, True);
  // при убиваниии процесса остаётся одна папка в Temp, поэтому решил её удалить батником
  SaveStringToFile(ExpandConstant('{tmp}\del.bat'), 'rd /s /q ' +
    AddQuotes(ExpandConstant('{tmp}')), False);
  WinExec(ExpandConstant('{tmp}\del.bat'), SW_HIDE);
  KillTaskA(ChangeFileExt(ExtractFileName(ParamStr(0)), '.tmp'));
end;

procedure PlsInsertNextDisk(num: Integer; CheckedFile: string);
var
  Capt: string;
begin
  CheckedFile:= ExpandConstant(CheckedFile);
  if not FileExists(CheckedFile) then
    begin
      Capt:= Format('Пожалуйста, вставьте диск №%d и нажмите ОК для продолжения установки.' + #13 +
        'Если Вы нажмёте Отмена, то дальнейшая установка %s будет невозможна.', [num, '{#MyAppName}']);
      // конечно для красоты лучше делать отдельную форму в виде сообщения, чтоб текст был по центру,
      // но так самое простое...
      if MsgBox(Capt, mbInformation, MB_OKCANCEL) = IDOK then
        PlsInsertNextDisk(num, CheckedFile)
      else CloseSetup;
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
    begin
      ExtractTemporaryFile('arc.exe');

      ExtractArc('{src}\data-1.arc','{app}');
      ExtractArc('{src}\data-2.arc','{app}');

      PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data3.arc не найден в корне диска, просим второй диск
      ExtractArc('{src}\data-3.arc','{app}');
      ExtractArc('{src}\data-4.arc','{app}');
      PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск

      ExtractAllArc:= True; // сообщим, что все архивы распаковали
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID = wpInstalling then
    if ExtractAllArc then
      Cancel:= True
    else
    if ExitSetupMsgBox then
      CloseSetup
    else
  Cancel:= False;
end;

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


Последний раз редактировалось Serega, 25-11-2009 в 23:20. Причина: исправил скрипт

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

Отправлено: 20:44, 25-11-2009 | #493


Аватара для A1EXXX

Старожил


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

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


Serega, ваще от души!!! Всех зайцев убили )) Прям Рождественское чудо средь бела дня
Ещё и проценты?!!! Бомба!!! Респектище Вам за Ваши труды


Странная вещь... из двух архивов распаковался первый и запросило 2-й диск...

Отправлено: 21:05, 25-11-2009 | #494


Аватара для Habetdin


Автор проектов


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

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


A1EXXX,
Цитата Serega:
//если data3.arc не найден в корне диска, просим второй диск »

-------
Рекомендую: $25 на тест виртуального сервера (VPS) за регистрацию по ссылке


Отправлено: 21:18, 25-11-2009 | #495


Аватара для A1EXXX

Старожил


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

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


Habetdin, я понимаю, но data2.arc ещё не распаковался! + решил удовлетворить инсталл и вставил диск 2 - ничё не распаковал и сразу запросил 1-й...
Причиной не может быть то, что я arc'и маскирую под cab'ы? в скрипте приписать не забыл...

Последний раз редактировалось A1EXXX, 25-11-2009 в 21:33.


Отправлено: 21:22, 25-11-2009 | #496


Ветеран


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

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


Цитата A1EXXX:
из двух архивов распаковался первый »
Поправил скрипт в предыдущем сообщении, попробуйте.

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

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

Отправлено: 23:23, 25-11-2009 | #497


Аватара для STRELOK

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


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

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


Народ как это реализовать??? Сколько не пробовал всегда траблы выходили.
читать дальше »
http://imageban.ru/out/2009/11/24/1eb9b162026fcf085256925375fbd9a5.jpg

Последний раз редактировалось volk1234, 26-11-2009 в 01:19. Причина: ОПК 3.9 - картинку больше 640*480 только в виде ссылки!!


Отправлено: 23:28, 25-11-2009 | #498


Ветеран


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

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


Цитата STRELOK:
Сколько не пробовал всегда траблы выходили »
Что конкретно не получается?

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


Отправлено: 23:29, 25-11-2009 | #499


Аватара для STRELOK

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


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

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


Serega,
всё не получается. :-((((((((

Отправлено: 23:30, 25-11-2009 | #500



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход