Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: Tony Picekato
Дата сообщения: 02.04.2009 16:12
Люди.... кто знает, как после завершения компиляции скрипта запустить определенную программу с помощью inno setup preprocessor'a.
Автор: SotM
Дата сообщения: 02.04.2009 19:07
Tony Picekato
А какая тут вообще связь то?! Зачем нужно после компиляции запускать внешнюю программу с помощью Inno Setup Preprocessor'а!?
Автор: skeptik_vdm
Дата сообщения: 03.04.2009 06:09
У меня вопрос когда еще существовал ФТО там присутствовали раздачи игр Assassin's Creed и Fallout 3 их опубликовывал некий T-Rax по моему его так звали и он к своим раздачам прикреплял скрипт написаный на Инно в этом скрипте присутствовало проверка оборудования и т.д. может у кого есть?!??!
Автор: Yoldosh
Дата сообщения: 03.04.2009 07:05
кто нибудь может дать скрипт как на картинке
Автор: SotM
Дата сообщения: 03.04.2009 08:29
Yoldosh
Что-то не вижу в картинке ничего такого, что может отличаться от "стандартных" скриптов. Что здесь такого необычного?
Автор: skeptik_vdm
Дата сообщения: 03.04.2009 09:24
SotM
Тут белый фон затемнен!!!
Автор: Tony_Picekato
Дата сообщения: 03.04.2009 09:47
SotM
Ну мне просто нужно чтобы после того как был создан exe-файл инсталлятора он подписывался цифровой подписью с помощью этой "определенныой" проги. Т.к делать это нужно будет много раз хотелось бы автоматизировать. Кроме как вызывть ее с помощью препроцессора что-то ничего в голову не приходит. Можно конечно батник сделать,который запускал бы компиляцию и при завершении прогу эту ,но тогда все равно название инсталятора в батнике менять нужно будет т.к. они всегда разные. Если кто-то другой способ знает - раскажите, пожалуйста.

Автор: Yoldosh
Дата сообщения: 03.04.2009 15:13
SotM
В картинке изменен цвет фона.если есть такой скрипт поделись пожалуйста!!!

Добавлено:
у кого нибудь есть такой скрипт???
Автор: skeptik_vdm
Дата сообщения: 03.04.2009 17:47
По моей просьбе ни кто не поможет???
Автор: msatmb
Дата сообщения: 03.04.2009 19:57
skeptik_vdm
Держи к Ассасину. Правда картинок нет
[more]
#define TIME_FOR_VIEW 5

[Setup]
AppName=Assassin's Creed Director's Cut Edition®
AppVerName=Assassin's Creed Director's Cut Edition®
AppPublisher=Ubisoft
AppSupportURL=http://www.ubi.com
DefaultDirName={pf32}\Ubisoft
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
WizardSmallImageFile=D:\Project_AC\img\skins_img\small.bmp
;Small.bmp это картинка на верху продолговатая!
UserInfoPage=true
InternalCompressLevel=ultra64
DiskSpanning=true
DiskSliceSize=2000000000
UsePreviousAppDir=false
AllowUNCPath=false
OutputDir=D:\Project_AC
; Директория выхода инсталятора
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64
DisableProgramGroupPage=false
UsePreviousGroup=false
DefaultGroupName=Ubisoft\Assassin's Creed
VersionInfoVersion=1.0.0.2
AppID={{88A43236-2FFC-49AB-9DEF-D2481E3C2F9F}
UninstallFilesDir={app}\Assassin's Creed
DirExistsWarning=no
DisableReadyPage=true
VersionInfoCompany=© T-ReX
AppCopyright=© T-ReX 2008
SetupIconFile=D:\Project_AC\icon.ico
AppPublisherURL=http://www.ubi.com
AppVersion=1.0.0.2
UninstallDisplayName=Assassin's Creed®
UsePreviousSetupType=false
UsePreviousUserInfo=false
PrivilegesRequired=none
RestartIfNeededByRun=false
LanguageDetectionMethod=locale

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

[Tasks]
Name: desktopicon1; Description: Создать ярлык на Рабочем столе; GroupDescription: {cm:AdditionalIcons}
Name: directx9c; Description: DirectX9c; GroupDescription: Необходимые компоненты:

[Files]
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: img\skins_img\splash.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\smallprogress.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\welcome.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\bass.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: sound\my.mp3; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\get_hw_caps.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: dll\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_4.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_5.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_6.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_7.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_8.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_9.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\slideshow_img\Image_10.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: img\skins_img\finish.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak

[Icons]
Name: {group}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx10.exe; WorkingDir: {app}\Assassin's Creed; Tasks:
Name: {group}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx9.exe; WorkingDir: {app}\Assassin's Creed; Tasks: ; OnlyBelowVersion: 0,6.0.6000
Name: {group}\Официальный сайт; Filename: http://www.assassinscreed.com
Name: {group}\Удалить игру; Filename: {uninstallexe}; WorkingDir: {app}\Assassin's Creed
Name: {commondesktop}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx10.exe; Tasks: desktopicon1; WorkingDir: {app}\Assassin's Creed
Name: {commondesktop}\Assassin's Creed; Filename: {app}\Assassin's Creed\AssassinsCreed_Dx9.exe; Tasks: desktopicon1; WorkingDir: {app}\Assassin's Creed; OnlyBelowVersion: 0,6.0.6000

[Run]
Filename: {src}\Support\DirectX\DXSetup.exe; Parameters: /silent; WorkingDir: {src}\Support\DirectX\; Tasks: directx9c; StatusMsg: Установка DirectX подождите ...; Flags: waituntilterminated

[UninstallDelete]
Name: {app}\Assassin's Creed\*; Type: filesandordirs

[Registry]
Root: HKLM32; Subkey: SOFTWARE\Ubisoft; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed; ValueType: string; ValueName: InstallDir; ValueData: {app}\Assassin's Creed\; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed; ValueType: string; ValueName: Language; ValueData: Russian; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: execPath; ValueData: {app}\Assassin's Creed\AssassinsCreed_Game.exe; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: installdir; ValueData: {app}Assassin's Creed\; Flags: uninsdeletekey
Root: HKLM32; SubKey: SOFTWARE\Ubisoft\Assassin's Creed\GameUpdate; ValueType: string; ValueName: language; ValueData: us; Flags: uninsdeletekey

[Messages]
StatusExtractFiles=Установка файлов игры...
ChangeDiskTitle=Необходим следующий диск.
SelectDiskLabel2=Вставьте следующий диск и нажмите «OK».
[Code]
////////////////////////////////////////////////////
{Установка слайдшоу на окне инсталятора}
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
URLLabel: TNewStaticText;
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
case currTime of
{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
end;
if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
///////////////////////////////////////////////////
const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
///////////////////////////////
var
state, soft: boolean;
Image1, Image2: TBitmapImage;
const
NeedSize = 6;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result := st1;
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://game-torrent.info', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;


procedure InitializeWizard();
var
Name1: string;
i: Integer;
Text: TNewStaticText;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;

begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('my.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\my.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
    begin
BASS_ChannelPlay(i, True);
end
end

///////////////////////////////////////////////////////////
{Изменение окна инсталятора с пермещение прогрессбара}
ExtractTemporaryFile('Image_1.bmp');
ExtractTemporaryFile('Image_2.bmp');
ExtractTemporaryFile('Image_3.bmp');
ExtractTemporaryFile('Image_4.bmp');
ExtractTemporaryFile('Image_5.bmp');
ExtractTemporaryFile('Image_6.bmp');
ExtractTemporaryFile('Image_7.bmp');
ExtractTemporaryFile('Image_8.bmp');
ExtractTemporaryFile('Image_9.bmp');
ExtractTemporaryFile('Image_10.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + 10;
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.Width - WizardForm.CancelButton.Width - ScaleX(40);
WizardForm.ProgressGauge.Height := 12;
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := WizardForm.ProgressGauge.Width;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_1.bmp'));
SplashImage.Hide;
///////////////////////////////////////////////////////////

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'Special for Game-Torrent.info';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := 330;
URLLabel.Left := 30;

ExtractTemporaryFile('Welcome.bmp')
ExtractTemporaryFile('Finish.bmp')
WizardForm.WizardSmallBitmapImage.Top:=0
WizardForm.WizardSmallBitmapImage.Left:=0
WizardForm.WizardSmallBitmapImage.Width:=498
WizardForm.WizardSmallBitmapImage.Height:=58
WizardForm.PageNameLabel.Visible:=false
WizardForm.PageDescriptionLabel.Visible:=false
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
ListBox.Height := ScaleY(90);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Path,s,z: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < (NeedSize*1024) then
begin
if FreeMB>1024 then
begin
s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
end
else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
MsgBox(s, mbCriticalError, MB_OK)
Result := False;
end;
end;
////////////////////////////////
begin
if CurPageID = wpUserInfo then
begin
Result:=true;
if not state
or not soft
then
begin
z:='Не все компоненты удовлетворяют требованиям игры.' #13+#13 'Вы действительно хотите продолжить установку?'
if MsgBox(z, mbInformation, MB_YESNO)=idNo
then Result:=false;
end
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
Text: TNewStaticText;
Windows,WindowsName: TMemo;
Os,OS1,OS2,OS3,OS4,OS5,OS6,OS7,OS8,OS9,OS10,HARD: string; // строка с названием необходимой ОС
ProcessorName: string;
Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText: TNewStaticText;
VidRam: integer;
pfunc: LongWord;
begin
/////////////////////////////////////////
{Здесь код показа на странице Инсталл измененного прогрессбара}
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);

WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
URLLabel.Hide;

WizardForm.ProgressGauge.Show;
SplashImage.Show;
WizardForm.StatusLabel.Show;

WizardForm.CancelButton.Enabled :=True;
end
else
begin
URLLabel.Show;
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.StatusLabel.Hide;
//WizardForm.FilenameLabel.Hide;

if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;

end;
//////////////////////////////////////////////////////////////
If CurPageID=wpFinished then
begin
Image2:=TBitmapImage.Create(WizardForm)
with Image2 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.FinishedPage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Finish.bmp')
end
WizardForm.NextButton.Left:=380;
WizardForm.NextButton.Top:=325;
end
//////////////////////////////
If CurPageID=wpWelcome then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Начать>';
end
begin
Image1:=TBitmapImage.Create(WizardForm)
with Image1 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.WelcomePage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Welcome.bmp')
end
end
if CurPageID=wpSelectTasks then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установка';
If WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
end
if CurPageID = wpUserInfo then
begin
//подменяем сраницу информации о пользователе на информацию об ОС
wizardForm.UserInfoNameEdit.visible:=false;
wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
wizardForm.UserInfoNameLabel.visible:=false;
wizardForm.UserInfoOrgLabel.visible:=false;
wizardForm.UserInfoOrgEdit.visible:=false;
wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

OS:=' Microsoft Windows XP Service Pack 2';
OS10:=' Microsoft Windows XP Service Pack 3'; //строка является записью из реестра
OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является записью из реестра
OS2:=' Windows Vista (TM) Ultimate ';
OS3:=' Windows Vista (TM) Home Basic ';
OS4:=' Windows Vista (TM) Home Premium ';
OS5:=' Windows Vista (TM) Business ';
OS6:=' Windows Vista (TM) Ultimate Service Pack 1'
OS7:=' Windows Vista (TM) Home Basic Service Pack 1';
OS8:=' Windows Vista (TM) Home Premium Service Pack 1';
OS9:=' Windows Vista (TM) Business Service Pack 1';
HARD:='Все компоненты удовлетворяют требованиям игры.';
Windows := TMemo.Create(WizardForm);

StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with StaticText do begin
Left := 0;
Top := 52;
Width := 417;
Height := 14;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Parent := WizardForm.UserInfoPage;
StaticText.font.color:=clGreen;
end


with Windows do
begin
Text := ' Операц. система';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
Processor := TMemo.Create(WizardForm);
with Processor do begin
Text := ' Процессор';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
VideoCardPanel := TMemo.Create(WizardForm);
with VideoCardPanel do begin
Text := ' Видеоадаптер';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
AudioCardPanel := TMemo.Create(WizardForm);
with AudioCardPanel do begin
Text := ' Звуковая карта';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end
RAMPanel := TMemo.Create(WizardForm);
with RAMPanel do begin
Text := ' ОЗУ';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

end

PageFilePanel := TMemo.Create(WizardForm);
with PageFilePanel do begin
Text := ' Файл подкачки';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

ProcessorNamePanel := TMemo.Create(WizardForm);
with ProcessorNamePanel do begin

Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if ProcessorMHZ < 2600 then
begin
ProcessorNamePanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;

VideoCardNamePanel := TMemo.Create(WizardForm);
with VideoCardNamePanel do begin
Text := ' ' + GetVideoCardName + 'MB'; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
Parent := WizardForm.UserInfoPage;
VidrAM := GetVidMemLocal / 1000000;

if VidRam > 127 then
begin
if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
end;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if GetVidMemLocal < 127000000 then //128 MB
begin
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
VideoCardNamePanel.Color := $ccccff;
end;


end
AudioCardNamePanel := TMemo.Create(WizardForm);
with AudioCardNamePanel do begin
Text := ' ' + GetSoundCardName;
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

ReadOnly := True;

end
RAMTotalPanel := TMemo.Create(WizardForm);
with RAMTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPhys + 1 < 1024 then
begin
RAMTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;

PageFileTotalPanel := TMemo.Create(WizardForm);
with PageFileTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPage < 1247 then
begin
PageFileTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;


end

if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin

WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end

end

end;

// Проверка Windows 9x
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end

end;


if OS=(WindowsName.Text) then state:=true else
if OS2=(WindowsName.Text) then state:=true else
if OS3=(WindowsName.Text) then state:=true else
if OS4=(WindowsName.Text) then state:=true else
if OS5=(WindowsName.Text) then state:=true else
if OS6=(WindowsName.Text) then state:=true else
if OS7=(WindowsName.Text) then state:=true else
if OS8=(WindowsName.Text) then state:=true else
if OS9=(WindowsName.Text) then state:=true else
if OS10=(WindowsName.Text) then state:=true else
if OS1=(WindowsName.Text) then state:=true else state:=false;

////////////////////////////////////////////////////////////////////////
{условие проверки оборудования}
if HARD=(StaticText.Caption) then soft:=true else soft:=false;
////////////////////////////////////////////////////////////////////////
Text := TNewStaticText.Create(WizardForm);
with Text do begin
Left := 0;
Top := 0;
Width := 417;
Height := 14;
if state then
begin
Font.Color:=clGreen;
WindowsName.color:=$CCFFCC;
// SP_Num.color:=$CCFFCC;
Caption := 'Операционная система соответствует требованиям игры.';
end
else
begin
Font.Color:=clREd;
WindowsName.color:=clRed;

WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
WindowsName.Top := ScaleY(20);
WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
WindowsName.ReadOnly := True;



Caption := 'Операционная система не соответствует требованиям игры.';
end
Parent := WizardForm.UserInfoPage;
end
Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with Text do begin
Left := 0;
Top := 220;
Width := 417;
Height := 14;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Parent := WizardForm.UserInfoPage;
end

end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;


[/more]
Автор: skeptik_vdm
Дата сообщения: 03.04.2009 20:08
msatmb
Спасибо удружил!!!
Автор: msatmb
Дата сообщения: 03.04.2009 21:52
А можно изменить внешний вид деинсталлятора? Поискал по форуму и ссылкам, но что-то не нашел... Хотелось бы чтобы деинсталляция происходила в "узком" окне, т.е. без всяких надписей типа "происходит удаление" и т.д.

Добавлено:
и как сделать, чтобы ярлык на рабочем столе появлялся действительно в конце установки, т.е. после всех тех действий что обозначены в секции Run.
Автор: kombat 77
Дата сообщения: 03.04.2009 22:59
msatmb

Цитата:
Хотелось бы чтобы деинсталляция происходила в "узком" окне, т.е. без всяких надписей типа "происходит удаление" и т.д.

Возможно [more=так] procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.MainPanel.Hide;
UninstallProgressForm.PageNameLabel.Hide;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.Bevel1.Hide;
UninstallProgressForm.InnerNotebook.Top := ScaleY(0);
UninstallProgressForm.Height := ScaleY(120);
end;[/more]устроит.


Цитата:
чтобы ярлык на рабочем столе появлялся действительно в конце установки

После нажатия "Завершить" [more]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
CreateShellLink(ExpandConstant('{userdesktop}\Uninstall Run.lnk'), '',
ExpandConstant('{uninstallexe}'), '', '', '', 0, SW_SHOWNORMAL);
end;
удаляем ярлык при деинсталляции -->
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Uninstall Run.lnk'));
end;
[/more]
Цитата:
после всех тех действий что обозначены в секции Run
, ну или описывать действия в коде в CurStepChanged ssPostInstall, далее создать ярлык.


Автор: msatmb
Дата сообщения: 04.04.2009 01:19
kombat 77
Все прекрасно работает. Спасибо огромное! А можно как то усовершенствовать код (после нажатия "Завершить") чтобы он проверял установил пользователь галочку "Добавить ярлык на рабочий стол" и в случае утверждения - выполнялся, в противном случае - не выполнялся. Только у меня галочка ставится не через Task, а через Check: MakeDesktopIcon. И еще как в твоем коде прописать WorkingDir?
Автор: kombat 77
Дата сообщения: 04.04.2009 02:11
msatmb

Цитата:
чтобы он проверял установил пользователь галочку "Добавить ярлык на рабочий стол" и в случае утверждения - выполнялся, в противном случае - не выполнялся. Только у меня галочка ставится не через Task, а через Check: MakeDesktopIcon. И еще как в твоем коде прописать WorkingDir?


Цитата:
MakeDesktopIcon
[more=Может так]
var
MakeDesktopIcon: TCheckBox;

procedure InitializeWizard();
begin
MakeDesktopIcon := TCheckBox.Create(WizardForm);
MakeDesktopIcon.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
MakeDesktopIcon.Left := ScaleX(0);
MakeDesktopIcon.Width := WizardForm.DirEdit.Width;
MakeDesktopIcon.Caption := ExpandConstant('{cm:CreateDesktopIcon}');
MakeDesktopIcon.Checked := True;
MakeDesktopIcon.Parent := WizardForm.SelectDirPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
if MakeDesktopIcon.Checked then
CreateShellLink(ExpandConstant('{userdesktop}\Uninstall_Test.lnk'), 'Uninstall My Programm',
ExpandConstant('{uninstallexe}'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Uninstall_Test.lnk'));
end;
[/more]

Автор: Dermuin
Дата сообщения: 04.04.2009 09:16
Помогите сделать скрипт как в этом инстоляторе http://koooka.narod.ru/iso.html
Сборка ISO от Koooka 06.03.2009
Автор: msatmb
Дата сообщения: 04.04.2009 10:30
kombat 77
что-то не получается... если галочка отжата - ярлык не выводится, а вот если галочка нажата, то ярлык выводится до нажатия кнопки "Завершить", т.е. до выполнения всех операций.
Автор: kombat 77
Дата сообщения: 04.04.2009 12:36
msatmb

Цитата:
что-то не получается... если галочка отжата - ярлык не выводится, а вот если галочка нажата, то ярлык выводится до нажатия кнопки "Завершить", т.е. до выполнения всех операций.
Проверь операторные скобки (begin ... end), подозреваю что есть еще функции в процедуре CurStepChanged.
Автор: msatmb
Дата сообщения: 04.04.2009 13:03
kombat 77
Ндя...что-то у меня действительно наворочено в коде. и не только в CurStepChanged
Вот сам код полностью... Может подскажешь?
[more]
#define MyAppName "Морской охотник"
#define MyAppVerName "Морской охотник"
#define MyAppExeName "PT-Boats.exe"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=no
OutputDir=D:\MyInno_Script\Морской охотник\
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskClusterSize=4096
DiskSliceSize=1735040064
WizardImageFile=D:\MyInno_Script\Морской охотник\scripts\big.bmp
WizardSmallImageFile=D:\MyInno_Script\Морской охотник\scripts\small.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
UninstallDisplayIcon={app}\{#MyAppExeName}

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

[Files]
Source: "{tmp}\arc.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "D:\MyInno_Script\vtv\scripts\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\MyInno_Script\Морской охотник\scripts\main_theme.mp3"; DestDir: "{tmp}"; Flags: dontcopy
Source: D:\MyInno_Script\Морской охотник\Local Settings\Aplication Data\*; DestDir: {localappdata}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: D:\MyInno_Script\Морской охотник\Морской Охотник\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath


[Run]
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData ENVIRONMENTS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q ENVIRONMENTS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData NAVALS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление моделей кораблей..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q NAVALS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData SOUNDS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление звукового окружения..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q SOUNDS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -dpGameData WEAPONS.arc"; WorkingDir: "{app}"; StatusMsg: "Идет восстановление моделей оружия..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "cmd.exe"; Parameters: "/C del /F /Q WEAPONS.arc"; WorkingDir: "{app}"; StatusMsg: "Удаление мусора..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{src}\Drivers\Ageia\PhysX.exe"; Parameters: "/quiet"; StatusMsg: "Установка: NVIDIA PhysX System Software..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp1
Filename: "{src}\Drivers\VCRedist\vcredist_x86.exe"; Parameters: "/q"; StatusMsg: "Установка: Microsoft Visual C++ 2005..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp2
Filename: "{src}\Drivers\codec\XviD-1.1.3.exe"; Parameters: "/silent /nocancel"; StatusMsg: "Установка: XviD кодек..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp3

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Akella"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Akella\PTBoats"; ValueName: "Install Dir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletevalue


[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Check: MakeDesktopIcon;

[Messages]
BeveledLabel=Repack by MSA
StatusExtractFiles=Копирование файлов
WizardSelectDir=Выбор папки установки и дополнительных задач
SelectDirDesc=Выберите целевую директорию и дополнительные задачи, которые должны выполниться во время установки


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

[Code]
type
HSTREAM = DWORD;

const
NeedSize = 1500;
BASS_SAMPLE_LOOP = 4;

var
DesktopIcon,Comp1,Comp2,Comp3: TCheckBox;
PageNameLabel, PageDescriptionLabel: TLabel;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
ProgressBar1: TNewProgressBar;
AppDir: string; ResultCode: Integer;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;
end;

Function customComp1:Boolean;
begin
Result:=Comp1.Checked;
end;
Function customComp2:Boolean;
begin
Result:=Comp2.Checked;
end;
Function customComp3:Boolean;
begin
Result:=Comp3.Checked;
end;

procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;

procedure ReadEntries();
begin
    RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir', AppDir);
end;

procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;

function InitializeSetup(): Boolean;
var
Exe: string;
begin
Exe:='PT-Boats.exe';
if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir')) then
begin
ReadEntries;
case (MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' уже найдена на Вашем компьютере. Запустить игру?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON3)) of
IDYES:
begin
if (FileExists(AddBackslash(AppDir) + Exe)) then
begin
Exec(AddBackslash(AppDir) + Exe, '', ExtractFilePath(AddBackslash(AppDir) + Exe), SW_SHOW, ewNoWait, ResultCode);
end else begin
MsgBox('Невозможно запустить ' + '{#SetupSetting("AppName")}' + ', т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1);
end
Result:=False;
end
IDNO:
begin
Result:=True;
end
IDCANCEL:
begin
Result:=False;
end
end
end else begin
Result:=True;
end
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 := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;

procedure InitializeWizard();
var
Name1: string;
    i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('main_theme.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\main_theme.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
    begin
BASS_ChannelPlay(i, True);
end;
end;
DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Добавить ярлык на рабочий стол';
Left := ScaleX(0);
Top := ScaleY(175);
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(350);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(330);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
begin
WizardForm.BorderStyle := bsDialog;
end;
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 1,5 GB';
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

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

ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Left := wizardform.progressgauge.left;
Top := wizardform.progressgauge.top+wizardform.progressgauge.height+15;
Width := wizardform.progressgauge.width;
Height := wizardform.progressgauge.height;
Max :=11; //задается как кол-во файлов в [_run]
end;

Comp3 := TCheckBox.Create(WizardForm);
with Comp3 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'XviD кодек';
Left := ScaleX(0);
Top := ScaleY(112);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;
Comp2 := TCheckBox.Create(WizardForm);
with Comp2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Microsoft Visual C++ 2005';
Left := ScaleX(0);
Top := ScaleY(132);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;

Comp1 := TCheckBox.Create(WizardForm);
with Comp1 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'NVIDIA PhysX System Software';
Left := ScaleX(0);
Top := ScaleY(152);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 0;
Checked := True;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpSelectDir then
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
begin
WizardForm.Position:=poScreenCenter;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
procedure DeInitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;
[/more]
Может еще кому-то пригодится
Автор: kombat 77
Дата сообщения: 04.04.2009 13:28
msatmb
[more]

[Icons]
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\Морской охотник.lnk'), 'Морской охотник',
ExpandConstant('{app}\PT-Boats.exe'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\Морской охотник.lnk'));
end;

[/more]
Автор: msatmb
Дата сообщения: 04.04.2009 13:59
kombat 77
Автор: Dermuin
Дата сообщения: 04.04.2009 16:56


Как сделать вот такую строничку, от инстолятора о котором я писал выше.
Автор: msatmb
Дата сообщения: 04.04.2009 17:29
В секции Run имеется следующий код:
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" setup-2.arc"; WorkingDir: "{src}"; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Можно ли его полностью перетащить в секцию Code со всеми "месагами", "флагами" и "инсталами"
Автор: kombat 77
Дата сообщения: 04.04.2009 21:24
msatmb

Цитата:
Можно ли его полностью перетащить в секцию Code со всеми "месагами", "флагами" и "инсталами"

[more=Пробуй]
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssPostInstall then
begin
ExtractTemporaryFile('Arc.exe');
WizardForm.StatusLabel.Caption := 'Идет восстановление окружающего мира...';
Exec(ExpandConstant('{tmp}\Arc.exe'), 'x -y -dp' +
'"' + ExpandConstant('{app}\GameData') + '"' + ' setup-2.arc',
'"' + ExpandConstant('{src}') + '"', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
ProgressBar1.Position := ProgressBar1.Position + 1;
WizardForm.StatusLabel.Caption := WizardForm.StatusLabel.Caption;
end;

if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\Морской охотник.lnk'), 'Морской охотник',
ExpandConstant('{app}\PT-Boats.exe'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;
[/more]



Добавлено:
Dermuin

Цитата:
Как сделать вот такую строничку, от инстолятора о котором я писал выше.

[more=пример]

[Setup]
AppName=Connection Manager for MF626
AppVerName=Connection Manager for MF626
DefaultDirName={pf}\Connection Manager
OutputDir=userdocs:

[Code]

var
SettingPage: TWizardPage;
WizText, MemoText1, MemoText2: TNewStaticText;
CustomMemo: TNewEdit;
Text1, CCheck1, CCheck2, CCheck3, CCheck4: TCheckBox;

procedure Text1OnClick(Sender: TObject);
begin
if Text1.Checked then
MemoText1.Caption := '#'
else
MemoText1.Caption := '*';
end;

procedure InitializeWizard();
begin
SettingPage := CreateCustomPage(wpWelcome, 'Настройки', '');

WizText := TNewStaticText.Create(SettingPage);
WizText.Top := ScaleY(5);
WizText.Width := ScaleX(400);
WizText.Caption := 'Номер запроса баланса по умолчанию';
WizText.Parent := SettingPage.Surface;

MemoText1 := TNewStaticText.Create(SettingPage);
MemoText1.Top := WizText.Top + WizText.Height + ScaleY(8);
MemoText1.Font.Size := 16;
MemoText1.Caption := '*';
MemoText1.Parent := SettingPage.Surface;

CustomMemo := TNewEdit.Create(SettingPage);
CustomMemo.Top := WizText.Top + WizText.Height + ScaleY(10);
CustomMemo.Left := MemoText1.Width + ScaleX(5);
CustomMemo.Width := ScaleX(50);
CustomMemo.Text := '100';
CustomMemo.Parent := SettingPage.Surface;

Text1 := TCheckBox.Create(SettingPage);
Text1.Top := CustomMemo.Top + CustomMemo.Height + ScaleY(10);
Text1.Width := ScaleX(150);
Text1.Caption := 'Номер начинается с #';
Text1.Checked := False;
Text1.OnClick := @Text1OnClick;
Text1.Parent := SettingPage.Surface;

MemoText2 := TNewStaticText.Create(SettingPage);
MemoText2.Top := WizText.Top + WizText.Height + ScaleY(8);
MemoText2.Left := CustomMemo.Left + ScaleX(53);
MemoText2.Font.Size := 16;
MemoText2.Caption := '#';
MemoText2.Parent := SettingPage.Surface;

CCheck1 := TCheckBox.Create(SettingPage);
CCheck1.Top := WizardForm.InnerNotebook.Height / 2;
CCheck1.Width := ScaleX(400);
CCheck1.Checked := True;
CCheck1.Caption := 'Патч корректировки русского языка от SerGGGik (Vista)';
CCheck1.Parent := SettingPage.Surface;

CCheck2 := TCheckBox.Create(SettingPage);
CCheck2.Top := CCheck1.Top + CCheck1.Height + ScaleY(10);
CCheck2.Left := ScaleX(20);
CCheck2.Width := ScaleX(380);
CCheck2.Checked := False;
CCheck2.Caption := 'Заменить файл lan_RUS.dll';
CCheck2.Parent := SettingPage.Surface;

CCheck3 := TCheckBox.Create(SettingPage);
CCheck3.Top := CCheck2.Top + CCheck2.Height + ScaleY(10);
CCheck3.Width := ScaleX(400);
CCheck3.Checked := True;
CCheck3.Caption := 'Установить драйвера модема';
CCheck3.Parent := SettingPage.Surface;

CCheck4 := TCheckBox.Create(SettingPage);
CCheck4.Top := CCheck3.Top + CCheck3.Height + ScaleY(10);
CCheck4.Width := ScaleX(400);
CCheck4.Checked := True;
CCheck4.Caption := 'Автоматический запуск программы при включении модема';
CCheck4.Parent := SettingPage.Surface;
end;

[/more]
Автор: msatmb
Дата сообщения: 05.04.2009 01:51
kombat 77
Спасибо. Но что-то не идет распаковка... Может там по другому нужно указать что архив лежит рядом с инсталлом?
Автор: Dermuin
Дата сообщения: 05.04.2009 02:52
kombat 77
А как к этим чекбоксам присвоить нужные функции
Автор: aidgest1709
Дата сообщения: 05.04.2009 03:58
Подскажите,как после окончания установки автоматом запускался другой exe файл.
Автор: Dermuin
Дата сообщения: 05.04.2009 05:13
CreateTask(3, GUID, PlayTask, 0, 'Играть Tom Clancy's H.A.W.X - DirectX 9', MainExeX9, '');

В фразе Играть Tom Clancy's H.A.W.X - DirectX 9 присутствует знак ' но компилятор ругается, как правильно написать код.
Автор: DeKaNszn
Дата сообщения: 05.04.2009 07:58
Dermuin

попробуй так:
CreateTask(3, GUID, PlayTask, 0, 'Играть Tom Clancy\'s H.A.W.X - DirectX 9', MainExeX9, '');
Автор: Dermuin
Дата сообщения: 05.04.2009 08:40
Не помогает

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.