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

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

 

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

Ветеран


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

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


Цитата El Sanchez:
Может без многомерных массивов можно обойтись? »
тоже сначала хотел несколькоми одномерными массивами обойтись, криво выходит, в цикле перебирать тяжело, появляются многомерные вложенные if'ы, не кошер в общем.

Да и вообще на будущее, мало ли кому пригодится, такого вопроса еще никто не задавал, судя по поиску ;-)

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

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

Отправлено: 08:09, 14-02-2012 | #821



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

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


Аватара для elChoopacabra

Старожил


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

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


svensoft, как бы всё это в справке наличествует...
1.
[Setup]
Uninstallable=not

2. Указывается не в Files
[Dirs]
Name: "{app}\Data"

Последний раз редактировалось elChoopacabra, 14-02-2012 в 13:33.

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

Отправлено: 10:25, 14-02-2012 | #822


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Ivan_009, Както так:
читать дальше »
[code]
Код: Выделить весь код
const
  PCFonFLY=true;
  notPCFonFLY=false;
var
  BackPanel, WizardPanel, StatusPanel, ImagePanel: TPanel;
  CaptionLabel: TLabel; BmpFile: TBitmapImage;
  NeedSpaceLabel,FreeSpaceLabel: TLabel;
  FreeMB, TotalMB: Cardinal; NeedSize: Integer;
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton: TButton;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;


type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
        SetLength(Result, Length(Result)-1);
End;

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
  if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
  LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
#ifdef SecondProgressBar
  ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent   := WizardForm.InstallingPage;
    Height   := WizardForm.ProgressGauge.Height;
    Left     := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(365);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar1.Width+ScaleX(5);
    Top       := ISDoneProgressBar1.Top + ScaleY(2);
    Width     := ScaleX(80);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width+ScaleX(30);
    Left     := ScaleX(0);
    Top      := ScaleY(30);
  end;
#ifdef SecondProgressBar
  PBTop:=PBTop+ScaleY(25);
  ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar2 do begin
    Parent   := WizardForm.InstallingPage;
    Left     := ScaleX(0);
    Top      := PBTop+ScaleY(8);
    Width    := ISDoneProgressBar1.Width;
    Max      := 1000;
    Height   := WizardForm.ProgressGauge.Height;
  end;
  LabelPct2 := TLabel.Create(WizardForm);
  with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar2.Width+ScaleX(5);
    Top       := ISDoneProgressBar2.Top + ScaleY(2);
    Width     := ScaleX(80);
  end;
#endif
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left     := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left     := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    Parent   := WizardForm.FinishedPage;
    AutoSize := False;
    Width    := 300;
    Left     := 180;
    Top      := 200;
  end;
  MyCancelButton:=TButton.Create(WizardForm);
  with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=ScaleX(135);
    Caption:=ExpandConstant('{cm:CancelButton}');
    Left:=ScaleX(360);
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB > 1024 then
    FreeSpaceLabel.Caption := ExpandConstant('{cm:FreeSize} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' Гб' else
    FreeSpaceLabel.Caption := ExpandConstant('{cm:FreeSize} ')+ IntToStr(FreeMB)+ ' Мб';
  if FreeMB < NeedSize then
    WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True;
end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
    NeedSpaceLabel.Caption := ExpandConstant('{cm:NeedSize} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' Гб' else
  NeedSpaceLabel.Caption := ExpandConstant('{cm:NeedSize} ')+ IntToStr(NeedSize)+ ' Мб';
end;

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Tiger.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result := True;
end;

procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  UnloadSkin();
end;

procedure InitializeWizard();
begin
  NeedSize:= {#NeedSize};

  ExtractTemporaryFile('Image1.bmp')
  ExtractTemporaryFile('Image2.bmp')
  ExtractTemporaryFile('Image3.bmp')
  ExtractTemporaryFile('Image4.bmp')

  WizardForm.ClientWidth:= ScaleX(800);
  WizardForm.ClientHeight:= ScaleY(620);
  WizardForm.Position:= poScreenCenter;

  WizardForm.InnerNotebook.Hide;
  WizardForm.OuterNotebook.Hide;
  WizardForm.Font.Name:= 'Georgia';

  BackPanel:= TPanel.Create(WizardForm)
  BackPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(800), ScaleY(618))
  BackPanel.Color:= clWhite
  BackPanel.BorderStyle:= bsNone
  BackPanel.ParentBackground:= False
  BackPanel.ParentColor:= False
  BackPanel.Parent:= WizardForm

  StatusPanel:= TPanel.Create(WizardForm)
  StatusPanel.SetBounds(ScaleX(2), ScaleY(2), ScaleX(796), ScaleY(18))
  StatusPanel.BorderStyle:= bsNone
  StatusPanel.ParentBackground:= False
  StatusPanel.ParentColor:= False
  StatusPanel.Font.Color:= clWhite
  StatusPanel.Font.Size:= 12
  StatusPanel.Font.Style:= [fsBold]
  StatusPanel.Font.Name:= 'Times New Roman'
  StatusPanel.Alignment:= taCenter
  StatusPanel.Parent:= WizardForm

  ImagePanel:= TPanel.Create(WizardForm)
  ImagePanel.SetBounds(ScaleX(2), ScaleY(21), ScaleX(796), ScaleY(484))
  ImagePanel.BorderStyle:= bsNone
  ImagePanel.ParentBackground:= False
  ImagePanel.ParentColor:= False
  ImagePanel.Parent:= WizardForm

  BmpFile:= TBitmapImage.Create(WizardForm)
  BmpFile.Stretch:= True;
  BmpFile.SetBounds(ScaleX(0),ScaleY(0), ScaleX(796), ScaleY(484))
  BmpFile.Parent:= ImagePanel

  WizardPanel:= TPanel.Create(WizardForm)
  WizardPanel.SetBounds(ScaleX(2), ScaleY(506), ScaleX(796), ScaleY(110))
  WizardPanel.Alignment:= taCenter;
  WizardPanel.BorderStyle:= bsNone
  WizardPanel.ParentBackground:= False
  WizardPanel.ParentColor:= False
  WizardPanel.Parent:= WizardForm

  CaptionLabel:= TLabel.Create(WizardForm);
  CaptionLabel.SetBounds(ScaleX(100), ScaleY(5), ScaleX(590), ScaleY(100));
  CaptionLabel.AutoSize:= False;
  CaptionLabel.WordWrap:= True;
  CaptionLabel.Transparent:= True;
  CaptionLabel.Font.Color:= $5F8BA2
  CaptionLabel.Font.Size:= 11
  CaptionLabel.Font.Style:= [fsBold]
  CaptionLabel.Alignment:= taCenter;
  CaptionLabel.Parent:= WizardPanel;

  NeedSpaceLabel:= TLabel.Create(WizardForm);
  NeedSpaceLabel.SetBounds(ScaleX(5),ScaleY(70),ScaleX(300),ScaleY(20))
  NeedSpaceLabel.Transparent:= True;
  NeedSpaceLabel.Font.Style:= [fsBold]
  NeedSpaceLabel.Parent:= WizardPanel

  FreeSpaceLabel:= TLabel.Create(WizardForm);
  FreeSpaceLabel.SetBounds(ScaleX(250), ScaleY(70), ScaleX(300),ScaleY(20))
  FreeSpaceLabel.Transparent:= True;
  FreeSpaceLabel.Font.Style:= [fsBold]
  FreeSpaceLabel.Parent:= WizardPanel

  WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;

  WizardForm.DirBrowseButton.Parent:= WizardForm
  WizardForm.DirBrowseButton.Left:= ScaleX(455)
  WizardForm.DirBrowseButton.Top:= ScaleY(590)
  WizardForm.DirBrowseButton.Font.Size:= 8
  WizardForm.DirBrowseButton.Font.Style:= [fsBold]

  WizardForm.DirEdit.Parent:= WizardForm
  WizardForm.DirEdit.Left:= ScaleX(5)
  WizardForm.DirEdit.Top:= ScaleY(590)
  WizardForm.DirEdit.Width:= ScaleX(445)
  WizardForm.DirEdit.Font.Size:= 8
  WizardForm.DirEdit.Font.Style:= [fsBold]

  WizardForm.ProgressGauge.Parent:= WizardForm
  WizardForm.ProgressGauge.Left:= ScaleX(5)
  WizardForm.ProgressGauge.Top:= ScaleY(590)
  WizardForm.ProgressGauge.Width:= ScaleX(450)

  WizardForm.StatusLabel.Parent:= WizardPanel
  WizardForm.StatusLabel.SetBounds(ScaleX(5), ScaleY(52), ScaleX(300), ScaleY(20))
  WizardForm.StatusLabel.Font.Style:= [fsBold]

  WizardForm.FilenameLabel.Parent:= WizardPanel
  WizardForm.FilenameLabel.SetBounds(ScaleX(5), ScaleY(68), ScaleX(450), ScaleY(20))
  WizardForm.FilenameLabel.Font.Style:= [fsBold]

  WizardForm.CancelButton.BringToFront;
  WizardForm.CancelButton.Left:= ScaleX(715)
  WizardForm.CancelButton.Top:= ScaleY(590)
  WizardForm.CancelButton.Font.Size:= 8
  WizardForm.CancelButton.Font.Style:= [fsBold]

  WizardForm.NextButton.BringToFront;
  WizardForm.NextButton.Left:= ScaleX(630)
  WizardForm.NextButton.Top:= ScaleY(590)
  WizardForm.NextButton.Font.Size:= 8
  WizardForm.NextButton.Font.Style:= [fsBold]

  WizardForm.BackButton.BringToFront;
  WizardForm.BackButton.Left:= ScaleX(545)
  WizardForm.BackButton.Top:= ScaleY(590)
  WizardForm.BackButton.Font.Size:= 8
  WizardForm.BackButton.Font.Style:= [fsBold]
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.DirEdit.Hide; WizardForm.DirBrowseButton.Hide;
  WizardForm.Progressgauge.Hide; WizardForm.StatusLabel.Hide;
  WizardForm.FilenameLabel.Hide; FreeSpaceLabel.Hide;
  NeedSpaceLabel.Hide;
  case CurPageID of
  wpWelcome:
    begin
      CaptionLabel.Caption:= ExpandConstant('{cm:Welcome}')
      StatusPanel.Caption:= 'Приветствие'
      BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image1.bmp'))
    end;
  wpSelectDir:
    begin
      WizardForm.DirEdit.Show; WizardForm.DirBrowseButton.Show;
      FreeSpaceLabel.Show; NeedSpaceLabel.Show;
      CaptionLabel.Caption:= ExpandConstant('{cm:SelectDir}')
      StatusPanel.Caption:= 'Подготовка к установке'
      WizardForm.NextButton.Caption:= 'Установить'
      BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image2.bmp'))
      GetNeedSpaceCaption; if FreeMB < NeedSize then WizardForm.NextButton.Enabled:=False;
    end;
  wpInstalling:
    begin
      WizardForm.Progressgauge.Show; WizardForm.StatusLabel.Show;
      WizardForm.FilenameLabel.Show;
      CaptionLabel.Caption:= ExpandConstant('{cm:Installing}')
      StatusPanel.Caption:= 'Установка'
      BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image3.bmp'))
    end;
  wpFinished:
    begin
      if ISDoneError then
      begin
        LabelTime3.Hide;
        WizardForm.Caption:= ExpandConstant('{cm:Error}');
        WizardForm.FinishedLabel.Font.Color:= clRed;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
      end;
      CaptionLabel.Caption:= ExpandConstant('{cm:Finished}')
      StatusPanel.Caption:= 'Завершение'
      BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image4.bmp'))
    end;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

  ExtractTemporaryFile('unarc.dll');

  #ifdef PrecompInside
  ExtractTemporaryFile('CLS-precomp.dll');
  ExtractTemporaryFile('packjpg_dll.dll');
  ExtractTemporaryFile('packjpg_dll1.dll');
  ExtractTemporaryFile('precomp.exe');
  ExtractTemporaryFile('zlib1.dll');
  #endif
  #ifdef SrepInside
  ExtractTemporaryFile('CLS-srep.dll');
  #endif
  #ifdef MSCInside
  ExtractTemporaryFile('CLS-MSC.dll');
  #endif
  #ifdef facompress
      ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
  #endif
  #ifdef records
      ExtractTemporaryFile('records.inf');
  #endif
  #ifdef precomp
    #if precomp == "0.38"
      ExtractTemporaryFile('precomp038.exe');
    #else
      #if precomp == "0.4"
        ExtractTemporaryFile('precomp040.exe');
      #else
        #if precomp == "0.41"
          ExtractTemporaryFile('precomp041.exe');
        #else
          #if precomp == "0.42"
            ExtractTemporaryFile('precomp042.exe');
          #else
            ExtractTemporaryFile('precomp038.exe');
            ExtractTemporaryFile('precomp040.exe');
            ExtractTemporaryFile('precomp041.exe');
            ExtractTemporaryFile('precomp042.exe');
          #endif
        #endif
      #endif
    #endif
  #endif
  #ifdef unrar
      ExtractTemporaryFile('Unrar.dll');
  #endif
  #ifdef XDelta
      ExtractTemporaryFile('XDelta3.dll');
  #endif
  #ifdef PackZIP
      ExtractTemporaryFile('7z.dll');
      ExtractTemporaryFile('PackZIP.exe');
  #endif

    ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue;     //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue;     //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 4
//    .....
// см. справку
#endif

#ifdef precomp
  PCFVer:={#precomp};
#else
  PCFVer:=0;
#endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
//        ChangeLanguage('English');
        if not SrepInit('',512,0) then break;
        if not PrecompInit('',128,PCFVer) then break;
        if not FileSearchInit(true) then break;

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract   ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),   ExpandConstant('{app}\out.dat'), false, false) then break;
        if not ISPackZIP       ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;
Остальные секции сам добавишь - файлы, ярлыки, и тому подобное. в коде для работы требуются много файлов - они были прописаны в обоих скриптах, эти секции нужно объединять вручную.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Последний раз редактировалось Gnom_aka_Lexander, 14-02-2012 в 22:48.

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

Отправлено: 22:02, 14-02-2012 | #823


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата Ivan_009:
почемуто щас другая ошибка »
Забыл внести этот месседж из старого скрипта. Смотри в изначальных скриптах секцию CustmMessages - там лекарство от твоей ошибки. А еще, терзают меня смутные сомненья, что справку забыл ты почитать, сев за изучение инно...

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 23:37, 14-02-2012 | #824


Аватара для Ivan_009

Ветеран


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

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


но почемуто невидно прогресс бара и процентов распаковки

Последний раз редактировалось Ivan_009, 21-02-2012 в 01:19.


Отправлено: 16:08, 15-02-2012 | #825


Аватара для alert30

Ветеран


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

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


Ivan_009, похоже много скриптов в Inno Setup впихал, поэтому и потеряно прогресс-бар.

Отправлено: 16:49, 15-02-2012 | #826


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

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
тоже сначала хотел несколькоми одномерными массивами обойтись, криво выходит, в цикле перебирать тяжело, появляются многомерные вложенные if'ы, не кошер в общем. »
R.i.m.s.k.y., как-то не вяжется пример массива c "5 столбцов", здесь их больше.
Цитата R.i.m.s.k.y.:
Пример массива:
['Москва','ул','Пушкарная','',''
'','','','',''
'','Ленинград','','пер','Московский'
...] »

R.i.m.s.k.y., вариант №2 способа узнать есть ли Интернет:
IsInternetActive.iss

Код: Выделить весь код
[code]
const
    INTERNET_OPEN_TYPE_PRECONFIG = 0;
    INTERNET_FLAG_NO_CACHE_WRITE = $4000000;
    INTERNET_FLAG_PRAGMA_NOCACHE = $100;
    INTERNET_FLAG_RELOAD = $80000000;
    HTTP_QUERY_STATUS_CODE = 19;
    HTTP_STATUS_OK = 200;

function InternetOpen(lpszAgent: String; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: Variant; dwFlags: DWORD): Integer; external 'InternetOpenA@wininet.dll stdcall';
function InternetOpenUrl(hInternet: Integer; lpszUrl, lpszHeaders: String; dwHeadersLength, dwFlags: DWORD; dwContext: Integer): Integer; external 'InternetOpenUrlA@wininet.dll stdcall';
function InternetCloseHandle(hInternet: Integer): Boolean; external 'InternetCloseHandle@wininet.dll stdcall';
function HttpQueryInfo(hRequest: Integer; dwInfoLevel: DWORD; var lpvBuffer: Char; var lpdwBufferLength: DWORD; var lpdwIndex: DWORD): Boolean; external 'HttpQueryInfoA@wininet.dll stdcall';


function IsInternetActive(): Boolean;
var
    hInt, hFile: Integer;
    lpBuffer: array [0..3] of Char;
    lpdwIndex, lpdwBufferLength: DWORD;
begin
    try
        hInt := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
        if hInt <> 0 then
        try
            hFile := InternetOpenUrl(hInt, 'http://microsoft.com', '', 0, INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_PRAGMA_NOCACHE, 0);
            lpdwIndex := 0;
            lpdwBufferLength := sizeof(lpBuffer);
            if HttpQueryInfo(hFile, HTTP_QUERY_STATUS_CODE, lpBuffer[0], lpdwBufferLength, lpdwIndex) then
                Result := StrToInt(lpBuffer[0]+lpBuffer[1]+lpBuffer[2]) = HTTP_STATUS_OK;
        finally
            InternetCloseHandle(hFile);
        end;
    finally
        InternetCloseHandle(hInt);
    end;
end;

procedure InitializeWizard();
begin
    if IsInternetActive() then
        MsgBox('yes', mbInformation, MB_OK)
    else
        MsgBox('no', mbInformation, MB_OK);
end;


Цитата El Sanchez:
Юникодный китайский Inno с интерфейсами может работать (см. CodeAutomation2.iss), можно попробовать портировать. »
Beginner85, попробовал - не получилось, либо access denied, либо чего-то там про токены.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:09, 16-02-2012 | #827


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

Ветеран


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

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


Цитата El Sanchez:
как-то не вяжется пример массива c "5 столбцов", здесь их больше »
а сколько их? в моем примере 3 строки 5 столбцов
блин в справке про синтаксис вообще по нулям, мой вопрос простой - как забить в Инно двумерный массив не каждую ячейку поотдельности, а общим видом
Если б я знал как правильно я бы и не спрашивал

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

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

Отправлено: 13:23, 16-02-2012 | #828


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Вложения
Тип файла: 7z IsGadget.7z
(8.2 Kb, 11 просмотров)

Цитата El Sanchez:
попробовал - не получилось, либо access denied, либо чего-то там про токены. »
Готов сделать длл-ку, но нужны тесты для отладки, у меня не получится, я платформу гаджетов удаляю сразу, как систему ставлю
Первый тест во вложении.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 13:51, 16-02-2012 | #829


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

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
а сколько их? в моем примере 3 строки 5 столбцов »
R.i.m.s.k.y., наличие только лишь одной пары скобок говорит о том, что перед нами пример массива с более чем 15-ю элементами, но раз так, то делай массив записей.
Цитата R.i.m.s.k.y.:
мой вопрос простой - как забить в Инно двумерный массив не каждую ячейку поотдельности »
По отдельности.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:33, 16-02-2012 | #830



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




 
Переход