Вопрос Запуск exe (bat) до начала распаковки архивов.

Carlos

Участник
Модератор
Всем привет. Возник такой вопрос:
Как запустить exe или bat файл до начала распаковки архивов.
Суть в том, что нужно убить процессы и службы на время установки.
Пробовал примеры из справки, ни один не помог.
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy

[Code_]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

///**************************************************///
function InitializeSetup(): Boolean;
begin
If RunTask('winamp.exe', false) then
begin
if MsgBox('Программа Winamp используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('winamp.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;

if CurStep = ssPostInstall then
begin
WizardForm.FileNameLabel.BringToFront;
lblExtractFileName.Caption:='Идет восстановление игровых архивов... это может занять 15-20 мин...ждите';
Exec(ExpandConstant('{app}\1.bat'), '','' , SW_SHOW, ewWaitUntilTerminated, n);
DeleteFile(ExpandConstant('{app}\1.bat'))
end;

[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirName={pf}\MyApp
DisableWelcomePage=True

[Code_]
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
Cancel:= True;
end;

function InitializeSetup(): Boolean;
var List: TStringList; src, dest, bat: string; res: Integer;
begin
src:= ExpandConstant('{src}');
BrowseForFolder('Choose destination dir', dest, True);
bat:= ExpandConstant('{userappdata}\exec.bat');
List:= TStringList.Create;
List.Add('echo off');
List.Add('set src='+src);
List.Add('set dest='+dest);
List.Add('@echo SourceDir: "%src%"');
List.Add('@echo DestinationDir: "%dest%"');
List.Add('pause');
List.Add('del "'+bat+'"');
List.Add('pause');
List.SaveToFile(bat);
List.Free;
Exec(bat, '', '', SW_SHOW, ewNoWait, Res);
end;[/Code]

Может быть есть какое-то другое решение.
 

Nemko

Дилетант
Модератор
Так поможет ?
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={sd}\My Application

[Files]
Source: "1.exe"; Flags: "DontCopy";

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
    ErrorCode: Integer;
begin
  if CurStep=ssInstall then
  begin
    ExtractTemporaryFile('1.exe');
    ShellExec('open', ExpandConstant ('{tmp}\1.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
    Sleep(300); // не нужна просто баловство
end;
end;
Да и процесс IS Done поменять наверное нужно с ssInstall на ssPostInstall
 
Последнее редактирование:

Carlos

Участник
Модератор
Nemko, Всё получилось. Спасибо!
 
Последнее редактирование:
Сверху