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

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

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

Аватара для El Sanchez

Ветеран


Contributor


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


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

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


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для Johny777

Ветеран


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

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


wertulll,
попробуй так
(по двум секциям раскидай)
Код: Выделить весь код
[Files]
Source: Files\button.bmp; DestDir: {app}; Attribs: hidden system;  /// копируем текстуру помимо как в темп(оттуда всё сотрётся после установки) ещё и в директорию установки и скрываем

[ code]
procedure InitializeUninstallProgressForm;
begin
  FileCopy(ExpandConstant('{app}\button.bmp'), ExpandConstant('{tmp}\button.bmp'), False); /// принцип такой же как и у тебя, только не с картинкой для деинсталятора а с текстурой кнопки
  LoadButtonImage(UninstallProgressForm.CancelButton) /// грузим текстуру для кнопки "отмены" окна удаления
end;

Последний раз редактировалось Johny777, 07-05-2012 в 18:59.

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

Отправлено: 18:45, 07-05-2012 | #1851



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

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


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


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

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


Johny777,
ошибка при удалении

Последний раз редактировалось wertulll, 18-09-2012 в 18:51.


Отправлено: 19:35, 07-05-2012 | #1852


Аватара для Johny777

Ветеран


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

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


wertulll,
там ведь кнопка только заблокирована?
если да, то не проще ли просто создать картинку, а кнопку скрыть?

Последний раз редактировалось Johny777, 08-05-2012 в 00:35.

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

Отправлено: 23:49, 07-05-2012 | #1853


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


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

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


Интересует такой вопрос — какие константы путей использовать, чтобы инсталлятор находил определенный файл или директорию у пользователя, и устанавливал туда нужные файлы?
Нужно для русификатора. Часто кстати видел, когда инсталлятор (русификатор или патч, к примеру) указывал путь, который я сам ранее назначал, ну или к примеру диск с этими файлами.

Отправлено: 03:13, 08-05-2012 | #1854


Аватара для alert30

Ветеран


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

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


bear!, файлы русификации не просто, а вот если русификаторы засунуто в инсталлятор PatchWise Free; то смогу положить код.

Отправлено: 04:39, 08-05-2012 | #1855


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


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

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


Ну в смысле не просто? Эверест что ли покорить нужно. Видел я подобное и на Inno Setup.
Это все ради удобства, пользователь и сам может указать директорию, куда нужно установить, но просто так эффектней и удобней наверное. Поэтому если есть возможность рассказать подробней об этом, то было бы отлично.

Отправлено: 06:20, 08-05-2012 | #1856


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


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

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


Johny777, последовал вашему совету

Последний раз редактировалось wertulll, 08-05-2012 в 07:48. Причина: ошибка


Отправлено: 07:42, 08-05-2012 | #1857


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


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

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


подскажите код для отображения этого

Последний раз редактировалось wertulll, 18-09-2012 в 18:51.


Отправлено: 07:47, 08-05-2012 | #1858


Аватара для Johny777

Ветеран


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

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


Цитата wertulll:
подскажите код для отображения этого »
насчёт лейбла с отображением прошедшего времени не знаю
а вот с процентами и оставшимся временем дела обстоят хорошо!

читать дальше »
Код: Выделить весь код
[Setup]
AppName=ProgressBar + TimeLeft v2 by South.Tver
AppVerName=ProgressBar + TimeLeft v2 by South.Tver
DefaultDirName={pf}\ProgressBar + TimeLeft v2
OutputBaseFilename=setup

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs
Source: {fonts}\*; DestDir: {app}; Flags: external;

Source: CallbackCtrl.dll; Flags: dontcopy
Source: InnoCallback.dll; Flags: dontcopy


[  Code]
type
  TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;
  TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);  /// проценты

var
  TimeLeftLabel : TLabel;

  PBOldProc     : Longint;
  WFCaption     : string;
  eTime, sTime  : DWORD;
///////////////////////////////// проценты /// начало
  PercentsTimer: LongWord;
  PercentsLabel: TLabel;

function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';
/////////////////////////////////////////// конец
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

///////////////////////////////// проценты /// начало
Function NumToStr(Float: Extended): String;
begin
  Result:= Format('%.1n', [Float]); StringChange(Result, ',', '.');
  while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
  SetLength(Result, Length(Result)-1);
End;

Procedure PercentsProc(h, msg, idevent, dwTime: Longword);
Begin
  with WizardForm.ProgressGauge do
  begin
    PercentsLabel.Caption:= 'Выполнено ' + NumToStr((Position*100)/Max) + ' %';
  end;
End;
//////// конец



function LongintToStringTime(t:Longint):string;
var
  h,m,s:integer;
begin
  h:=t div 3600;
  t:=t-h*3600;
  m:=t div 60;
  s:=t-m*60;
  Result:='';
  if h>0 then Result:=Result+IntToStr(h)+' ч. ';
  if (m>0) or (h>0) then Result:=Result+IntToStr(m)+' мин. ';
  if (m>0) or (h>0) or (s>0) then Result:=Result+IntToStr(s)+' сек.';
end;

function PBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  lt:Longint;
  dt,at,pr,i1,i2:Extended;
  p:string;
  tc:DWORD;
begin
  Result:=CallWindowProc(PBOldProc,h,Msg,wParam,lParam);
  if (Msg=$402) and (WizardForm.ProgressGauge.Position>WizardForm.ProgressGauge.Min) then begin
    i1:=WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min;
    i2:=WizardForm.ProgressGauge.Max-WizardForm.ProgressGauge.Min;

    tc:=GetTickCount;
    if (tc-eTime)>=1000 then begin //пересчитывем время оставшееся до конца установки не чаще, чем раз в 1 секунду
      dt:=(tc-sTime)/1000;
      at:=i2*dt/i1;
      lt:=Round(at-dt)
      TimeLeftLabel.Caption:='Осталось - '+LongintToStringTime(lt);
      eTime:=tc;
    end;

    pr:=i1*100/i2;
    p:=' - ['+Format('%f',[pr])+'%]';
    StringChange(p,',','.');
  end;
end;

procedure AllCancel;
begin
  SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
  TimeLeftLabel.Free;
  PercentsLabel.Free; /// проценты
end;

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
  Result:=True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssInstall: begin
    
      MsgBox('Чтобы продлить время установки будут скопированы шрифты и справки',mbInformation,MB_OK); /// чтоб не пугались
    
      PercentsTimer:= SetTimer(0, 0, 100, WrapTimerProc(@PercentsProc, 4));  /// проценты
    
      TimeLeftLabel:=TLabel.Create(nil);
      with TimeLeftLabel do begin
        Parent:=WizardForm.InstallingPage;
        AutoSize:=True;
        SetBounds(WizardForm.ProgressGauge.Left + ScaleX(250),WizardForm.ProgressGauge.Top + ScaleY(30),ScaleY(80),ScaleY(21));
      end;

      ///////////////////// проценты /// начало
      PercentsLabel:= TLabel.Create(nil);
      with PercentsLabel do
      begin
        SetBounds(WizardForm.ProgressGauge.Left + ScaleX(30), WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10), WizardForm.StatusLabel.Width, WizardForm.StatusLabel.Height);
        AutoSize:= True;
        Transparent := True;
        Parent:= WizardForm.InstallingPage;
      end;
      /// конец


      sTime:=GetTickCount;
      eTime:=sTime;

      PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4,CallBackProc(@PBProc,4));
    end;
    ssPostInstall: AllCancel;
  end;
end;

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

/////// проценты /// начало
procedure DeinitializeSetup();
begin
  KillTimer(0, PercentsTimer);
end;
///////// конец

сделал так что ты можешь стереть проценты и оставить только время установки
немного изменил сами "проценты" (скопипастил создание лейбла у того же примера с которым совмещал )

1. пример процентов из InnoSetup FAQ
2. "оставшееся время" - это пример ProgressBar + TimeLeft v2 by South.Tver (....\Inno Setup 5\Modules\South\botva2_example\progressbar+TimeLeft.iss), но без ботвы

*(перед тем как выложить проверил)

архив с библиотеками

Последний раз редактировалось Johny777, 26-03-2013 в 15:57.

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

Отправлено: 10:51, 08-05-2012 | #1859


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


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

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


Johny777, спасибо !!!решил вопрос через ISDone

Отправлено: 12:32, 08-05-2012 | #1860



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход