В моем инсталляторе я выполнил исполняемый файл третьей стороной, которая берет на себя мой wizardhwnd
, за этим 3 окном партии ехе я бег ProgressPage
, когда окно еха третьей стороны закрыто, я хочу, чтобы мой ProgressPage
в конец, также, единственный способ, которым я знаю, слушать третью сторону exe с и теперь для проблемы Я не могу прочитать ResultCode
снова после того, как я выполнил сторонний exe (HTMLInstaller возвращает код «99» для «Skip» и код «100» для «install»), есть ли способ прочитать ResultCode
, что третье лицо отправляет его до его закрытия?получить обратный код с параметром ewNoWait
Вот мой код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=C:\Users\Elram.Vashdi\Documents\GitHub\Utilities\Inno_solutions - Copy\Inno Templates\feed_installer_API\1.11.0.0_XML\XML parser
#include <idp.iss>
[Code]
var
ProgressPage: TOutputProgressWizardPage;
Guidvalue, hWnd, path : String;
WinHttpReq: Variant;
rv: Integer;
ProgressBarLabel: TNewStaticText;
const
MB_ICONINFORMATION = $40;
HexDigits = 'ABCDEF';
SC_CLOSE = $F060;
MF_GRAYED = $00000001;
MF_BYCOMMAND = $00000000;
type
HMENU = THandle;
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU;
external '[email protected] stdcall';
function EnableMenuItem(hMenu: HMENU; uIDEnableItem: UINT; uEnable: UINT): BOOL;
external '[email protected] stdcall';
function inttohex(l:longword; digits:integer):string;
var hexchars:string;
begin
hexchars:='ABCDEF';
setlength(result,digits);
while (digits>0) do begin
result[digits]:=hexchars[l mod 16+1];
l:=l div 16;
digits:=digits-1;
end;
end;
function OpenEvent(dwDesiredAccess: DWORD; bInheritHandle:BOOL; lpName:String) : THandle;
external '[email protected] stdcall';
function CreateEvent(lpEventAttributes: Integer; bManualReset:BOOL; bInitialState:BOOL; lpName:String) : THandle;
external '[email protected] stdcall';
function InitializeSetup: Boolean;
begin
idpDownloadFile('https://s3.amazonaws.com/www.informativesetup.com/guardbox/HTMLInstaller.exe', ExpandConstant('{tmp}\HTMLInstaller.exe'));
Result := True;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
waitRes : String;
I, TimeOut: Integer;
InitialTime, CurrentTime: DWord;
isDllDoneRes : Boolean;
begin
hWnd := inttohex(StrToInt(ExpandConstant('{wizardhwnd}')),8);
Exec(ExpandConstant('{tmp}\HTMLInstaller.exe'), '-carrier_id=GB1000029 -activebrowser=IE -hwnd='+ ExpandConstant(hWnd) +' -installation_session_id=' + ExpandConstant(Guidvalue)+'', '', SW_SHOW,
ewNoWait, ResultCode)
ProgressPage.SetText('Starting installation...', '');
ProgressPage.SetProgress(0, 0);
ProgressPage.Show;
try
for I := 0 to 2000 do begin
ProgressPage.SetProgress(I, 2000);
Sleep(100);
end;
finally
ProgressPage.Hide;
end;
ProgressPage.hide;
Result := True;
end;
////////////////////////GENERATE GUID/////////////////////
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
function GetGuid(dummy:string):string;
var Guid:TGuid;
begin
if CoCreateGuid(Guid)=0 then begin
result:=IntToHex(Guid.D1,8)+'-'+
IntToHex(Guid.D2,4)+'-'+
IntToHex(Guid.D3,4)+'-'+
IntToHex(Guid.D4[0],2)+IntToHex(Guid.D4[1],2)+'-'+
IntToHex(Guid.D4[2],2)+IntToHex(Guid.D4[3],2)+
IntToHex(Guid.D4[4],2)+IntToHex(Guid.D4[5],2)+
IntToHex(Guid.D4[6],2)+IntToHex(Guid.D4[7],2);
end else
result:='00000000-0000-0000-0000-000000000000';
end;
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Guidvalue := GetGuid('');
WizardForm.Width := 646;
WizardForm.Height := 536;
ProgressPage := CreateOutputProgressPage('My App','');
end;
Привет, slappy, я пытался использовать 'ewWaitUntilTerminated', но интро-настройка« замораживается »и не может быть нажата. – ElramV
В Inno Setup нет (например, из NSIS)' ExecWait'. – TLama
Да и Да :) ewWaitUntilTerminated будет ждать завершения приложения, но оригинальное приложение может «зависнуть». Это происходит потому, что никакие действия не выполняются. – Slappy