내가 인수 제 3 자 exe 파일을 실행 내 wizardhwnd
, 나는 ProgressPage
실행이 제 3 자 EXE 창, 제 3 자 exe 인 윈도우가 종료 할 때 내 ProgressPage
원하는 뒤에 끝으로뿐만 아니라 제 3 자 exe를 듣기 위해 알고있는 유일한 방법은 ResultCode
이고 이제는 문제가 입니다. 제 3 자 exe를 실행 한 후에는 ResultCode
을 다시 읽을 수 없습니다 (HTMLInstaller는 코드 "99"를 반환 함). "건너 뛰기"및 "설치"의 경우 "100"코드), 종료하기 전에 타사 exe가 보내는 ResultCode
을 읽을 수있는 방법이 있습니까?GET 리턴 코드 내 설치에
[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;
안녕하세요, 나는'ewWaitUntilTerminated'을 사용하려고 시도했지만 inno 설정은 "정지"되어 클릭 할 수 없습니다. – ElramV
Inno Setup에는 NSW가있을 수있는'ExecWait'가 없습니다. – TLama
예, 예 :) ewWaitUntilTerminated는 앱이 끝날 때까지 기다리지 만 원래 앱은 "정지"할 수 있습니다. 이는 아무런 작업도 수행되지 않기 때문입니다. – Slappy