updater tutorial studio software setup script portable inno descargar installer inno-setup

installer - studio - inno setup tutorial



Inno Setup: ¿Cómo abortar/finalizar la configuración durante la instalación? (4)

El problema es que [Run] ocurre después de que el proceso de instalación se completa con éxito. Así que no puedes cancelar en este punto, solo puedes desinstalar. También [Run] no le permite obtener el código de salida.

Así que tienes algunas opciones.

Use Event: procedure CurStepChanged(CurStep: TSetupStep);

Y la llamada al {tmp}/test.bat usando Exec o ExecAsOriginalUser ambos devuelven el ResultCode. A continuación, puede solicitar al usuario que desinstale.

Sin embargo creo que realizar una cancelación sería más fácil.

Para hacerlo, cree un Evento AfterInstall en el último archivo de su proyecto. Y ejecute el programa desde este evento, ya que puede cancelar desde este evento.

Aquí hay un código de ejemplo 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;

Durante mi instalación, ejecuto un archivo bat. Si el archivo bat devuelve un error, necesito cancelar / finalizar la configuración. Me gustaría que hiciera un MsgBox diga al usuario lo que sucedió, luego que el aborto se vea y actúe como si el usuario presionara el botón Cancelar .

¿Es posible abortar / finalizar la configuración?

Los ejemplos de código serían realmente apreciados.

[Run] Filename: {tmp}/test.bat; WorkingDir: {tmp}; Flags: waituntilterminated runhidden


Gracias, Robert. Es un problema común que ocurre en cualquier momento cuando el script detecta que la configuración no puede continuar. Sin embargo, hay un problema en su solución. WizardForm.Close invoca el cuadro de diálogo de cancelación, y la instalación se detiene solo si el usuario responde "Sí". Para salir definitivamente, deberíamos invocar CancelButtonClick.

[Files] Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstall [Code] var CancelWithoutPrompt: boolean; function InitializeSetup(): Boolean; begin CancelWithoutPrompt := false; result := true; end; procedure MyAfterInstall(); begin (Do something) if BadResult then begin MsgBox(''Should cancel because...'',mbError,MB_OK) CancelWithoutPrompt := true; WizardForm.Close; end; end; procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin if CurPageID=wpInstalling then Confirm := not CancelWithoutPrompt; end;


He usado un código de respuestas aquí para redactar una solución completa para ejecutar comandos de manera segura en la sección [Ejecutar] con la notificación adecuada y la reversión en caso de error.


Solo para redondear las otras posibilidades:

Si puede verificar la condición de requisito previo antes de recopilar cualquier información del usuario, entonces el mejor lugar para realizar la verificación es en la función InitializeSetup . Esto le permite mostrar un MsgBox y luego salir con Result := False para abortar la instalación.

Si necesita recopilar cierta información del usuario primero (como el directorio de instalación) pero aún puede verificar la condición sin instalar ningún archivo (aparte de algunos a través de ExtractTemporaryFile ), entonces el mejor lugar es en la función PrepareToInstall . Esto le permite mostrar un mensaje de error (devolviéndolo), momento en el que el usuario puede regresar y corregir algo o salir de la instalación por sí mismo.

Si la condición que está verificando se relaciona específicamente con la selección del usuario en una página particular (de nuevo, como el directorio de destino), y puede hacer la verificación rápidamente y sin alterar el sistema del usuario, entonces es mejor manejarlo. NextButtonClick ; puede mostrar un MsgBox con el error y luego devolver False para evitar pasar a la página siguiente.

Si tiene que esperar hasta después de instalar todo lo demás, entonces es un poco tarde para salir de la instalación, pero si quiere hacerlo de todos modos, la respuesta de Robert será suficiente.