Пользователь
Сообщения: 148
Благодарности: 49
|
Профиль
|
Отправить PM
| Цитировать
habib2302, т.к. файлов нету,скрипта нету,то пример.
Сделал так
читать дальше »
Код: 
////////////////////// Начало ExecAndWait //////////////////
var
lastproc: cardinal;
const
NORMAL_PRIORITY_CLASS = $00000020;
REALTIME_PRIORITY_CLASS = $00000100;
type
_TStartupInfo = record
cb: DWORD;
lpReserved, lpDesktop: Longint;
lpTitle: PAnsiChar;
dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
wShowWindow, cbReserved2: Word;
lpReserved2: Byte;
hStdInput, hStdOutput, hStdError: Longint;
end;
_TProcessInformation = record
hProcess, hThread: Longint;
dwProcessId, dwThreadId: DWORD;
end;
_TMsg = record
hWnd: HWND;
msg, wParam: Word;
lParam: LongWord;
Time: TFileTime;
pt: TPoint;
end;
function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
procedure GetStartupInfo(var lpStartupInfo: _TStartupInfo); external 'GetStartupInfoA@kernel32.dll stdcall';
function CreateProcess(lpApplicationName: PAnsiChar; lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: DWORD; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: PAnsiChar; lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _TStartupInfo; var lpProcessInformation: _TProcessInformation): BOOL; external 'CreateProcessA@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: Longint; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function TerminateProcess(hProcess: Longint; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
procedure Application_ProcessMessages;
var
Msg: _TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, 1) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
function ExecAndWait(filename, params: pansichar; showcmd: integer; Priority: Smallint; zav: DWord): Boolean;
var
SI : _TStartupInfo;
PI : _TProcessInformation;
CMD: string;
prt: DWORD;
begin
Result:=false;
CMD:='"' + filename + '" ' + params;
GetStartupInfo(SI);
SI.wShowWindow := showcmd;
SI.dwFlags := 1;
if Priority = 0 then prt:= NORMAL_PRIORITY_CLASS else
if Priority = 1 then prt:= REALTIME_PRIORITY_CLASS;
Result:=CreateProcess('', PansiChar(CMD), 0, 0, false, prt,'', pansichar(ExtractFilePath(filename)), SI, PI);
lastproc:=PI.dwProcessId;
if zav=1 then
begin
while WaitforSingleObject(PI.hProcess, 50) = $00000102 do
Application_ProcessMessages;
end;
CloseHandle(PI.hProcess)
end;
////////////////////// Конец ExecAndWait ///////////////////
читать дальше »
Код: 
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.
[Languages]
Name: RUS; MessagesFile: "compiler:Languages\Russian.isl"
[Code ]
var
Timer: TTimer;
Labelpr: TLabel;
NewProgressBar1: TNewProgressBar;
// ExecAndWait
#include "ExecAndWait.iss"
procedure RedesignWizardForm;
begin
Labelpr := TLabel.Create(WizardForm);
with Labelpr do
begin
Parent := WizardForm;
Left := ScaleX(96);
Top := ScaleY(120);
Width := ScaleX(289);
Caption:= 'Установка флеша';
end;
{ NewProgressBar1 }
NewProgressBar1 := TNewProgressBar.Create(WizardForm);
with NewProgressBar1 do
begin
Parent := WizardForm;
Left := ScaleX(96);
Top := ScaleY(144);
Width := ScaleX(289);
Height := ScaleY(25);
Max:= 100;
end;
end;
procedure FlRun(Sender: TObject);
begin
ExecAndWait(ExpandConstant('{src}\activex.exe'), '/install /force', SW_HIDE, 0,1);
WizardForm.Close;
end;
procedure Timepr(Sender: TObject);
begin
NewProgressBar1.Position:=NewProgressBar1.Position+9;
if NewProgressBar1.Position= 100 then
begin
Labelpr.Caption:= 'Завершение установки';
Timer.Enabled:= False;
end;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;
Timer:=TTimer.Create(nil);
with Timer do begin
Interval:= 300;
OnTimer:=@Timepr;
end;
WizardForm.OnActivate:= @FlRun;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;
Время таймера должно быть меньше времени установки флеша. Прогрессбар тупо двигается по таймеру,а в это время происходит установка, потом прогресс доходит до максимума и лейбл меняется на завершение установки,в то время как флеш еще ставится. хотел сделать ожидание установщика (если флеш установится), но тогда процесс зависает. Можно конечно создать еще процесс,но это извращенство. Вообщем так. Или файлы со скиптом и я по изгаляюсь )
|