El problema es que [Run]
se produce después de que el proceso de instalación se complete correctamente. Para que no pueda cancelar en este momento, solo puede desinstalar. También [Run]
no le permite obtener el código de salida.
Así que tiene algunas opciones.
Uso Evento: procedure CurStepChanged(CurStep: TSetupStep);
Y la llamada del {tmp}\test.bat
usando Exec
o ExecAsOriginalUser
ambos devuelven el ResultCode. Luego puede solicitar al usuario que desinstale.
Sin embargo, creo que realizar una cancelación sería más fácil.
Para hacer eso, cree un evento AfterInstall
en el último archivo de su proyecto. Y ejecuta el programa desde este evento, ya que puedes cancelar desde este evento.
Aquí hay un código de muestra que muestra cómo se podría hacer.
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstall
[Code]
procedure MyAfterInstall();
var
ResCode : Integer;
begin
if Exec(ExpandConstant('{tmp}') + '\test.bat',
'', SW_HIDE, ewWaitUntilTerminated, ResCode) then
begin
{ Program Ran successfully ResCode now contains exit code results }
{ if Exit was 10 then Cancel Installation. }
if ResCode = 10 then
begin
WizardForm.Close;
end;
end
else
begin
{ Problem running Program }
MsgBox('Error', SysErrorMessage(ResCode), mbError, MB_OK);
end;
end;
Véase también [Cómo forzar instalación Inno Setup a fallar cuando el comando Ejecutar falla?] (Http://stackoverflow.com/q/1122588/850848) y [Usando código de salida de proceso para mostrar mensaje de error para un archivo específico en \ [Run \]] (http://stackoverflow.com/q/9621099/850848) –
véase también [Salir de Inno Instalación y Configuración de \ [\ code]] (https://stackoverflow.com/q/4438506/ 850848 # 39788977). –