Inno Setup (создание инсталяционных пакетов)

Статус
В этой теме нельзя размещать новые ответы.

sergey3695

Ветеран
Модератор
Shift85, но ведь можно было подправить.
Из SetStateNewButtons можешь удалить UpdateButton(WizardForm.DirBrowseButton,3);
Код:
procedure ShowComponents(CurPageID: Integer);
begin
SetStateNewButtons(CurPageID); // ОБНОВЛЯЕМ ТЕКСТУРЫ КНОПОК

case CurPageID of
wpSelectDir: // СТРАНИЦА ВЫБОРА ПАПКИ НАЗНАЧЕНИЯ
begin
GetFreeSpaceCaption(nil)
WizardForm.DirEdit.Show;
WizardForm.DirBrowseButton.Show;
[B]UpdateButton(WizardForm.DirBrowseButton,3);[/B]
NeedSpaceLabel.Show;
FreeSpaceLabel.Show;
end;
end;
end;
Вот почему
Код:
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonPanel[AButtonIndex].Visible := [B]AButton.Visible;[/B]
...
Не болела бы у меня голова было бы еще проще :)
 

Mailchik

Старожил
Проверенный
Нужна подсказка. делаю рэпак программы, хочу совместить x86, x64 в одном инсталляторе. Проблема в том что у обоих версий все dll и exe имеют разное название. т.е. в х86 имеют такой вид "name_x86.exe, name_x86.dll" а в х64 "name_x64.exe, name_64.dll", как сделать чтобы автоматически распаковывался нужный набор? Была идея с распаковкой в temp с последующим перемещением нужного набора, но почему-то не получилось.
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: dll_x64.dll; DestDir: {app}; Check: ISWIN64;
Source: dll_x86.dll; DestDir: {app}; Check: not ISWIN64;
 

sergey3695

Ветеран
Модератор
Shift85, посмотри хоть модуль текстурирования кнопок. LoadButtonImage(NextButton,1); добавь после того как кнопку сдвинул. должно помочь.
 

Gabriel

Мимокрокодил
День добрый! Решил освоить эту прекрасную программу и сделал самый простой инстал для из игры купленной в стиме GTA4, но при компиляции файлов все время выскакивает ошибка, в которой говорится о том, что большой файл и нужно что-то где-то включить. Причем тот же инстал прекрасно работает с игрой Hitman Sniper Challenge. Вопрос как мне быть и как с этим бороться?
Код:
[Setup]
AppId={{701B0003-9114-4402-B8B8-95EA3796FA7C}
AppName=GTA4
AppVersion=1.0.0
AppVerName=GTA4 1.0.0
AppPublisher=Gabriel
DefaultDirName={pf}\GTA4
DefaultGroupName=GTA4
AllowNoIcons=yes
OutputBaseFilename=GTA4
SetupIconFile=C:\Users\Gabriel\Desktop\_jpg.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\GTAIV\GTAIV.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs


[Icons]
Name: "{group}\GTA4"; Filename: "{app}\GTAIV.exe"
Name: "{group}\{cm:UninstallProgram,GTA4}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\GTA4"; Filename: "{app}\GTAIV.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\GTAIV.exe"; Description: "{cm:LaunchProgram,GTA4}"; Flags: nowait postinstall skipifsilent
[ADMIN="Krinkels"]Спрашивай в соответствующем разделе, а не где попало. Перенес сообщения.[/ADMIN]
 

nik1967

Old Men
Проверенный
Gabriel, ошибся разделом.
Ну уж так и быть
 

EvilAlex

Старожил
Доброго времени суток.

Сделал анимированный прогресс бар -


Но в инстолляторе она идет как простая джипег или пнг картинка, просто заполняет.
Подскажите пожалуйсто, как сделать чтобы она и там была анимированной ?
Заранее спасибо!
 

sergey3695

Ветеран
Модератор
EvilAlex, с помощью библиотек вставить gif изображение (gifctrl.dll к примеру (fayri.dll не советую)) или разбить анимацию на картинки и сделать слайдшоу с таким же интервалом как в анимации.
 

Gabriel

Мимокрокодил
Gabriel, ошибся разделом.
Ну уж так и быть
Спасибо за совет, вообщем переделал я скрипт и ура все заработало...инстал создался и запустился и даже игра установилась, но не запустилась-отсутствует "bink32.dl". Я его скачал отдельно и скопировал в папку с установленной игрой и в папку windows/system32, но это не решило проблему:cry:
Код:
[Setup]
DiskSpanning=true
DiskSliceSize=1566000000
AppId={{701B0003-9114-4402-B8B8-95EA3796FA7C}
AppName=GTA4
AppVersion=1.0.0
AppVerName=GTA4 1.0.0
AppPublisher=Gabriel
DefaultDirName={pf}\GTA4
DefaultGroupName=GTA4
AllowNoIcons=yes
OutputBaseFilename=GTA4
SetupIconFile=C:\Users\Gabriel\Desktop\_jpg.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\GTAIV\GTAIV.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "E:\Steam\SteamApps\common\Grand Theft Auto IV\Installers\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs



[Icons]
Name: "{group}\GTA4"; Filename: "{app}\GTAIV.exe"
Name: "{group}\{cm:UninstallProgram,GTA4}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\GTA4"; Filename: "{app}\GTAIV.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\GTAIV.exe"; Description: "{cm:LaunchProgram,GTA4}"; Flags: nowait postinstall skipifsilent
 

Shift85

Старожил
Как добавить страницу системных требований...
Если можно дайте пожалуйста пример...
 

vint56

Ветеран
Проверенный
Shift85
#define Processor "3000"
#define VideoCard "128"
#define RAM "512"
#define WinVerMajor "5"
#define WinVerMinor "1"
#define ServicePack "2"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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

[CustomMessages]
rus.Requirements1=Проверка системных требований
rus.Requirements2=Программа установки обнаружила следующие необходимые компоненты
rus.Requirements3=Все компоненты удовлетворяют требованиям игры.
rus.Requirements4=Компоненты, выделенные красным, не удовлетворяют требованиям игры.
rus.DeviceDriver=Драйвер устройства не обнаружен
rus.Processor=Процессор
rus.VideoCard=Видеоадаптер
rus.SoundCard=Звуковая карта
rus.RAM=Память (ОЗУ)
rus.OperationSystem=Операционная система



[Files]
Source: "InstallFiles\*"; Flags: dontcopy;

Код:
type
TALabel = array of TLabel;

var
SystemPage, SelectTasksPage: TWizardPage;

RequirementsLbl, ProcessorLbl, VideoCardLbl, SoundCardLbl, RAMLbl, SystemLbl,
ProcessorNameLbl, VideoCardNameLbl, SoundCardNameLbl, RAMTotalLbl, SystemNameLbl: TLabel;
Keys: TArrayOfString;
ASysReq: TALabel;

function DetectHardware: Integer; external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';
function GetProcessorName: PAnsiChar; external 'hwc_GetProcessorName@files:get_hw_caps.dll stdcall';
function GetProcessorFreq: Integer; external 'hwc_GetProcessorFreq@files:get_hw_caps.dll stdcall';
function GetVideoCardName: PAnsiChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetVidMemLocal: Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetPdmWidth: Integer; external 'hwc_GetPdmWidth@files:get_hw_caps.dll stdcall';
function GetPdmHeight: Integer; external 'hwc_GetPdmHeight@files:get_hw_caps.dll stdcall';
function GetSoundCards: Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSoundCardName: PAnsiChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetSystemPhys: Integer; external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetWindowsName: PAnsiChar; external 'hwc_GetWindowsName@files:get_hw_caps.dll stdcall';

function DelSp(s: string): string;
begin
  while Pos('  ',s)>0 do StringChange(s,'  ',' ');
  Result:=Trim(s);
end;

function GetElementIndex(a:TALabel; lbl:TLabel):integer;
var
  i:integer;
  f:boolean;
begin
  Result:=-1;
  f:=False;
  for i:=0 to GetArrayLength(a)-1 do
    if a[i]=lbl then begin
      f:=True;
      Break;
    end;
  if f then Result:=i;
end;

procedure AddLabelToArray(var a:TALabel; lbl:TLabel);
begin
  if GetElementIndex(a,lbl)=-1 then begin
    SetArrayLength(a,GetArrayLength(a)+1);
    a[GetArrayLength(a)-1]:=lbl;
  end;
end;

procedure InitializeWizard();
var
  Pdm: string;
  vr,VidRam : Longint;
  Version: TWindowsVersion;
begin
  WizardForm.Color:=clBlack
  WizardForm.ClientWidth:=ScaleX(798);
  WizardForm.ClientHeight:=ScaleY(543);
  WizardForm.Center;
  WizardForm.OuterNotebook.Hide;
  WizardForm.InnerNotebook.Hide;
  WizardForm.Bevel.Hide;

  with WizardForm.CancelButton do
  begin
    Top := ScaleY(500);
  end;

  with WizardForm.NextButton do
  begin
    Top := ScaleY(500);
  end;

  with WizardForm.BackButton do
  begin
    Top := ScaleY(500);
  end;

////////////////////// SystemPage //////////////////////

  SystemPage:=CreateCustomPage(wpLicense, ExpandConstant('{cm:Requirements1}'), ExpandConstant('{cm:Requirements2}'));

  RequirementsLbl := TLabel.Create(WizardForm);
  with RequirementsLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(100), ScaleY(250), ScaleX(605), ScaleY(50));
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption := ExpandConstant('{cm:Requirements3}');
    Parent:=WizardForm;
  end;

  //================= Начало - Процессор =================//

  ProcessorLbl := TLabel.Create(WizardForm);
  with ProcessorLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(296), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Processor}');
    Parent := WizardForm;
  end;

  ProcessorNameLbl := TLabel.Create(WizardForm);
  with ProcessorNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(278), ScaleY(296), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := DelSP(GetProcessorName) + ' @' + IntToStr(GetProcessorFreq) + ' MHz';
    Parent := WizardForm;
  end;

  RegGetSubkeyNames(HKLM, 'Hardware\Description\System\CentralProcessor', Keys)

  if (GetProcessorFreq*GetArrayLength(Keys)) < {#Processor} then
  begin
    RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(AsysReq,ProcessorNameLbl);
  end;

//================= Конец - Процессор =================//

//================= Начало - Видеоадаптер =================//

  VideoCardLbl := TLabel.Create(WizardForm);
  with VideoCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(327), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:VideoCard}');
    Parent := WizardForm;
  end;

  VideoCardNameLbl := TLabel.Create(WizardForm);
  with VideoCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(280), ScaleY(327), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := GetVideoCardName;
    Parent := WizardForm;
  end;

  Pdm:=' ['+IntToStr(GetPdmWidth)+'x'+IntToStr(GetPdmHeight)+']';

  VidRam:=GetVidMemLocal/1000000;
  if (VidRam<63) or (VidRam>1100) then vr:=VidRam
  else if VidRam<100 then vr:=64
  else if VidRam<200 then vr:=128
  else if VidRam<300 then vr:=256
  else if VidRam<400 then vr:=384
  else if VidRam<600 then vr:=512
  else if VidRam<800 then vr:=792
  else if VidRam>800 then vr:=1024;

  if VidRam=0 then VideoCardNameLbl.Caption:=ExpandConstant('{cm:DeviceDriver}')
    else VideoCardNameLbl.Caption:=DelSp(VideoCardNameLbl.Caption)+' ~'+IntToStr(vr)+' MB'+Pdm;
  if vr<{#VideoCard} then begin
    RequirementsLbl.Caption:=ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(ASysReq,VideoCardNameLbl);
  end;

//================= Конец - Видеоадаптер =================//

//================= Начало - Звуковая карта =================//

  SoundCardLbl := TLabel.Create(WizardForm);
  with SoundCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(358), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:SoundCard}');
    Parent := WizardForm;
  end;

  SoundCardNameLbl := TLabel.Create(WizardForm);
  with SoundCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(278), ScaleY(358), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := GetSoundCardName;
    Parent := WizardForm;
  end;

  if GetSoundCards = 0 then begin
    RequirementsLbl.Caption:= ExpandConstant('{cm:Requirements4}');
    SoundCardNameLbl.Caption:= ExpandConstant('{cm:DeviceDriver}');
    AddLabelToArray(ASysReq,SoundCardNameLbl);
  end;

//================= Конец - Звуковая карта =================//

//================= Начало - ОЗУ =================//

  RAMLbl := TLabel.Create(WizardForm);
  with RAMLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(389), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:RAM}');
    Parent := WizardForm;
  end;

  RAMTotalLbl := TLabel.Create(WizardForm);
  with RAMTotalLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(279), ScaleY(389), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := IntToStr(GetSystemPhys + 1) + ' MB';
    Parent := WizardForm;
  end;

  if (GetSystemPhys+1)<{#RAM} then begin
    RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(ASysReq,RAMTotalLbl);
  end;

//================= Конец - ОЗУ =================//

//================= Начало - Операционная система =================//

  SystemLbl := TLabel.Create(WizardForm);
  with SystemLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(420), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:OperationSystem}');
    Parent := WizardForm;
  end;

  SystemNameLbl := TLabel.Create(WizardForm);
  with SystemNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(279), ScaleY(420), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := GetWindowsName;
    Parent := WizardForm;
  end;

  GetWindowsVersionEx(Version);

  if not Version.NTPlatform or
    (Version.NTPlatform and (Version.Major<{#WinVerMajor})) or
    (Version.NTPlatform and (Version.Major={#WinVerMajor}) and (Version.Minor<{#WinVerMinor})) or
    (Version.NTPlatform and (Version.Major={#WinVerMajor}) and (Version.Minor={#WinVerMinor}) and (Version.ServicePackMajor<{#ServicePack})) then begin
    RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(ASysReq,SystemNameLbl);
  end;

//================= Конец - Операционная система =================//

////////////////////// SystemPage //////////////////////
end;

procedure HideComponents;
begin
  RequirementsLbl.Hide;
  ProcessorLbl.Hide;
  ProcessorNameLbl.Hide;
  VideoCardLbl.Hide;
  VideoCardNameLbl.Hide;
  SoundCardLbl.Hide;
  SoundCardNameLbl.Hide;
  RAMLbl.Hide;
  RAMTotalLbl.Hide;
  SystemLbl.Hide;
  SystemNameLbl.Hide;
end;

procedure ShowComponents(CurPageID: Integer);
begin
  case CurPageID of
  SystemPage.ID:
  begin
    RequirementsLbl.Show;
    ProcessorLbl.Show;
    ProcessorNameLbl.Show;
    VideoCardLbl.Show;
    VideoCardNameLbl.Show;
    SoundCardLbl.Show;
    SoundCardNameLbl.Show;
    RAMLbl.Show;
    RAMTotalLbl.Show;
    SystemLbl.Show;
    SystemNameLbl.Show;
    end;
  end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  HideComponents;
  ShowComponents(CurPageID);
end;[/SPOILER]
 

Shift85

Старожил
Как добавить в начале скрипта проверку на Расширенную версию Inno Setup Compiler...
 

vint56

Ветеран
Проверенный
Shift85
#ifdef IS_ENHANCED
#if (Ver < 0x5040000) || (Pos('ee', IS_Ver_Str) < 1)
#pragma error 'Enhanced edition of Inno Setup (5.4.0.ee1 or higher) is required to compile this script'
#endif
#else
#error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif
 

Gabriel

Мимокрокодил
К примеру я создал инстал игры, но потом я решил вшить обновление или таблетку (если можно срипт автоматической установки таблетки), возможно ли обновить скрипт, чтобы не компилировать все файлы, а только обновить (дополнить)?
 

urban

Старожил
307cwam, можно к примеру через редактор страниц это сделать
Gabriel, без юзания исдона?
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху