Автор: Forslay
Дата сообщения: 14.04.2008 14:02
htuos, спасибо за объяснение, но не работает... Просто в функции: function InitializeSetup(): Boolean;, у меня много других задач, и может быть из-за них продолжается установка.... Твой код я ставлю в самый верх функции: function InitializeSetup(): Boolean;, для того, что бы он исполнялся ранее, чем все остальные задачи... Но Увы не получается, у меня запускается приложение, и инсталляция продолжается... Ну веть полюбому можно сделать так что бы инсталяция наглухо закрывалась, после нажатия на кнопку "ОК"... Неужели нет такого параметра, который бы такое делал... 88(
Вот мой function InitializeSetup(): Boolean;:
[more]function InitializeSetup(): Boolean;
var
ResultCode: Integer;
ResultReg: string;
xres, yres, bpp, pl, tmp: Integer;
hDC: Integer;
lt, datelimit: TSystemTime;
s, crlf: string;
CancelButton: TButton;
ResultCode: Integer;
MD5, ResultStr: string;
hWnd: Integer;
ResultCode: Integer;
s, ResultStr: string;
res:Integer;
StaticText: TNewStaticText;
BitmapImage, SplashImage: TBitmapImage;
CancelButton: TButton;
begin
Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg) then begin
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES then begin
RemoveQuotes(ResultReg);
if not Exec(ResultReg + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode) then MsgBox('Ошибка', mbError, MB_OK);
end
end else Result := true;
begin
If RunTask('Steam.exe', false) or RunTask('hl.exe', False) or RunTask('cstrike.exe', False) or RunTask('cs.exe', False) or RunTask('hlds.exe', False) or RunTask('counter-strike.exe', False) or RunTask('tier0_a.dll', False) then
begin
if MsgBox('Для корректной установки корневой базы игры, мастер установки автоматически закроет все приложения, относящиеся к игровому двигателю - "Gold Source" - [HL - 1]' #13#13 'Внимание !!! После того, как Вы нажмёте "Да", начнётся процесс распаковки временных файлов...' #13#13 'Приложение может зависнуть на несколько секунд, поэтому прошу, немного подождать...' #13#13#13 'Продолжить?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('Steam.exe');
KillTask('hl.exe');
KillTask('cstrike.exe');
KillTask('cs.exe');
KillTask('hlds.exe');
KillTask('counter-strike.exe');
KillTask('tier0_a.dll');
end else
Exit;
end;
end;
Result := True;
begin
MyArray := ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
Result := True;
end;
begin
if RegQueryStringValue(HKLM, 'Software\Valve\Half-Life\cstrike', 'UnInst', ResultStr)
then
begin
if ResultStr <> ''
then
begin
ResultStr := RemoveQuotes(ResultStr);
if MessageBox(hWnd, '{#MyGameName} уже установлен на Вашем компьютере.' #10#10 'Рекомендуется удалить, существующую копию, перед новой установкой.' #10#10'Удалить копию, установленную на Вашем компьютере ранее?', 'Предупреждение !!!', MB_YESNO or $10) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MessageBox(hWnd, 'Ошибка при деинсталляции.' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', 'Внимание!', MB_OK or $10);
end;
end;
begin
ExtractTemporaryFile('russian.ini');
isxdl_SetOption('language',ExpandConstant('{tmp}\russian.ini'));
isxdl_SetOption('title','Установка - загрузка дополнительного контента');
isxdl_SetOption('resume','false');
Modifying := ExpandConstant('{param:modify|0}') = '1';
FilesDownloaded := False;
ISToolPathRead := False;
end;
end;
begin
ExtractTemporaryFile('Nord MC - У тебя есть судьба.mp3');
ExtractTemporaryFile('Alex - Counter-Strike Sound.mp3');
ExtractTemporaryFile('David Guetta - Love is Gone.mp3');
ExtractTemporaryFile('Unnamed - Counter-Strike remix.mp3');
ExtractTemporaryFile('Benny Benassi - Change Style.mp3');
ExtractTemporaryFile('Дерево жизни - Горят мосты.mp3');
ExtractTemporaryFile('Баста - Моя игра.mp3');
ExtractTemporaryFile('K Maro - Lets go.mp3');
ExtractTemporaryFile('NZ - Немного пьяный.mp3');
ExtractTemporaryFile('System of a Down - Aerials.mp3');
ExtractTemporaryFile('Dj Mixon - SummerZ-06.mp3');
ExtractTemporaryFile('Pakito & Dj Markus - Вас не слышно.mp3');
ExtractTemporaryFile('Lil Wayne Ft. Static Major - Lollipop.mp3');
ExtractTemporaryFile('Dj Fat - Alkaruno.mp3');
ExtractTemporaryFile('bass.dll');
Result:= True;
end;
begin
ExtractTemporaryFile('Forslay.bmp');
ExtractTemporaryFile('SmallImageForm.bmp');
Splash := CreateCustomForm();
Form := CreateCustomForm();
try
Splash.BorderStyle := bsNone;
SplashImage := TBitmapImage.Create(Splash);
SplashImage.Parent := Splash;
SplashImage.AutoSize := True;
SplashImage.Align := alClient;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Forslay.bmp'));
Splash.Width := SplashImage.Width;
Splash.Height := SplashImage.Height;
Splash.Center();
Splash.Show();
SetWindowLong(Splash.Handle, GWL_EXSTYLE, GetWindowLong(Splash.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Splash.Handle, $00ff00, 255, LWA_COLORKEY);
Form.Caption := ExpandConstant('{cm:WaitCaption}');
Form.BorderIcons := [biSystemMenu];
Form.ClientWidth := 400;
Form.ClientHeight := 120;
Form.Left := GetSystemMetrics(16) - Form.ClientWidth - 8;
Form.Top := GetSystemMetrics(17) - Form.ClientHeight - 8;
Form.OnClose := @FormOnClose;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.SetBounds( Form.ClientWidth - 85, Form.ClientHeight - 33, 75, 23 );
CancelButton.Caption := ExpandConstant('{cm:CancelButtonCaption}');
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Parent := Form;
BitmapImage.SetBounds(8, 8, 56, 56);
BitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\SmallImageForm.bmp'));
StaticText := TNewStaticText.Create(Form);
StaticText.Parent := Form;
StaticText.Top := BitmapImage.Top + BitmapImage.Height / 3;
StaticText.Left := BitmapImage.Left + BitmapImage.Width + 8;
StaticText.Caption := ExpandConstant('{cm:InstallationPreparing, {#SetupSetting("AppName")}}');
StaticText.AutoSize := True;
ProgressBar := TNewProgressBar.Create(Form);
ProgressBar.Parent := Form;
ProgressBar.SetBounds( BitmapImage.Left, CancelButton.Top + 4, 280, 14 )
ProgressBar.Min := 0;
ProgressBar.Max := {#MaxPosition};
ProgressBar.Position := 0;
pfunc := WrapTimerProc(@OnTimer, 4);
TimerID := SetTimer(0, 0, {#TimeToElapse}, pfunc);
Form.ShowModal();
except
MsgBox(ExpandConstant('{cm:FormErrorMsg}'), mbCriticalError, mb_Ok);
finally
if ProgressBar.Position >= ProgressBar.Max then
Result := True;
Form.Free();
Splash.Free();
end;
end;
end;
var
MouseLabel, SiteLabel: TLabel;
procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://reallite.cs2.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clred
end;
procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clgreen
end;
procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clblue
end;
procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clteal
end;
procedure PrintButtonClick(Sender: TObject);
var WordpadLoc: String;
RetCode: Integer;
begin
if MsgBox( 'Произвести печать лицензионного соглашения?', mbConfirmation, MB_YESNO ) = IDYES then
begin
RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE',
'', WordpadLoc);
StringChange( WordpadLoc, '%ProgramFiles%', ExpandConstant('{pf}') );
StringChange( WordpadLoc, '"', '');
try
ExtractTemporaryFile('License.rtf');
if not Exec( WordPadLoc, ' /p ' + ExpandConstant('{tmp}\License.rtf') ,
ExpandConstant('{tmp}'), SW_HIDE, ewNoWait , RetCode ) then
MsgBox('Problems printing License file !' + IntToStr(RetCode), mbError, mb_Ok) ;
except
RaiseException('Problem printing license '+#13#13 +
'(Error ''' + GetExceptionMessage + ''' occurred)');
end;
end;
end;[/more]