Вопрос Как сделать задержку по времени, перед запуском файла?

Егор1988-00

Новичок
Приветствую!
задался вопросом, как сделать задержку запуска ехе файла, уже после установки. То есть я нажал на установщик, а он запустился через нужное мне время. К примеру нашел такой вот код, в нем указывается временной интервал по копированию файлов, можно так же примерно сделать интервал запуска файлов?
Примерный пример)
Код:
[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName=C:\AppName

[Files]
Source: Files\*; DestDir: {app}; BeforeInstall: MySleep

[Code]
const
SleepTime = 2000;

procedure MySleep();
begin
Sleep(SleepTime);
end;
 
Последнее редактирование:

Andreo Fadio

Старожил
@Егор1988-00,
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: InnoCallback.dll; Flags: dontcopy

[Code]
const
  TimeSet = 4;

type
  TTimerProc = procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);

var
  Timer: LongWord;
  TimeOut: Integer;

function WrapTimerProc(callback: TTimerProc; 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 TimerProc(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
var
 Res: Integer;
begin
  TimeOut:=TimeOut-1;
  if TimeOut = 0 then begin
   KillTimer(0, Timer);
   Exec(ExpandConstant('{sys}\notepad.exe'),'','', SW_SHOW, ewNoWait, Res);
  end;
end;

procedure InitializeWizard();
begin
  Timer:=SetTimer(0, 0, 1000, WrapTimerProc(@TimerProc,4));
  TimeOut:=TimeSet;
end;

procedure DeinitializeSetup();
begin
  if Timer <> 0 then KillTimer(0, Timer);
end;
 

Crachlow

Старожил
я правильно понимаю, это в миллисекундах значение?
было 4, программа запустилась сразу после установки. Поставил 40,уже 6 минут жду, не запускается)
если тебе нужно было запустить программу после установки с задержкой, то зачем тебе таймеры можно сделать
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code]
procedure DeinitializeSetup();
var
 Res: Integer;
begin
Sleep(4000);
 Exec(ExpandConstant('{sys}\notepad.exe'),'','', SW_SHOW, ewNoWait, Res);
end;
 

Егор1988-00

Новичок
если тебе нужно было запустить программу после установки с задержкой, то зачем тебе таймеры можно сделать
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code]
procedure DeinitializeSetup();
var
Res: Integer;
begin
Sleep(4000);
Exec(ExpandConstant('{sys}\notepad.exe'),'','', SW_SHOW, ewNoWait, Res);
end;
Спасибо, этот способ работает, как мне было нужно.
 

Егор1988-00

Новичок
если тебе нужно было запустить программу после установки с задержкой, то зачем тебе таймеры можно сделать
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code]
procedure DeinitializeSetup();
var
Res: Integer;
begin
Sleep(4000);
Exec(ExpandConstant('{sys}\notepad.exe'),'','', SW_SHOW, ewNoWait, Res);
end;
В процессе пользования кодом заметил, что пока выполняется задержка до запуска,
то программа все время висит пустым ярлыком на панели задач, что визуально не совсем эстетично.
Возможно ли убрать (скрыть) ярлык спящей программы, в данном случае?
 

Вложения

  • 14.7 KB Просмотры: 10

Andreo Fadio

Старожил
Возможно ли убрать (скрыть) ярлык спящей программы, в данном случае?
Команда Sleep усыпляет саму программу установки, так что пока она не отработает программа будет висеть.

Что можно сделать с этим? Не использовать данную команду.

Код:
[Setup]
AppName=My Prog
AppVersion=1.1
DefaultDirName={src}\My Prog
Compression=lzma2
SolidCompression=yes
OutputDir=.\

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
 F,S,T: String;
 StrArray: TStringlist;
 ErrorCode: Integer;
begin
 if CurStep = ssDone then begin
 //Путь до бат файла, который будет выполнять действие
 F:= ExpandConstant('{app}')+'\'+'StartProg.bat';
 //Что за программу хотим запустить
 S:= ExpandConstant('{sys}')+'\'+'Notepad.exe';
 //Время пишется в секундах
 T:= '10';
 if FileExists(F) then DeleteFile(F);
 StrArray:= TStringList.Create;
 StrArray.Add('TIMEOUT /T'+' '+T+' '+'/NOBREAK ');
 StrArray.Add('start'+' '+AddQuotes(S));
 StrArray.Add('del'+' '+AddQuotes(ExtractFileName(F)));
 StrArray.SaveToFile(F);
 Exec(F,'','', SW_HIDE, ewNoWait, ErrorCode);
 end;
end;
 
Последнее редактирование:

Егор1988-00

Новичок
Команда Sleep усыпляет саму программу установки, так что пока она не отработает программа будет висеть.

Что можно сделать с этим? Не использовать данную команду.

Код:
[Setup]
AppName=My Prog
AppVersion=1.1
DefaultDirName={src}\My Prog
Compression=lzma2
SolidCompression=yes
OutputDir=.\

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
F,S,T: String;
StrArray: TStringlist;
ErrorCode: Integer;
begin
if CurStep = ssDone then begin
//Путь до бат файла, который будет выполнять действие
F:= ExpandConstant('{app}')+'\'+'StartProg.bat';
//Что за программу хотим запустить
S:= ExpandConstant('{sys}')+'\'+'Notepad.exe';
//Время пишется в секундах
T:= '10';
if FileExists(F) then DeleteFile(F);
StrArray:= TStringList.Create;
StrArray.Add('TIMEOUT /T'+' '+T+' '+'/NOBREAK ');
StrArray.Add('start'+' '+AddQuotes(S));
StrArray.Add('del'+' '+AddQuotes(ExtractFileName(F)));
StrArray.SaveToFile(F);
Exec(F,'','', SW_HIDE, ewNoWait, ErrorCode);
end;
end;
это работает как нужно, спасибо.
 
Сверху