2011-09-13 29 views
5

Necesito que mi desinstalación ejecute un comando después de se eliminan los archivos que ha instalado. [UninstallRun] no sirve porque entiendo que se ejecuta ANTES de que se eliminen los archivos. Necesito una bandera "postuninstall".Ejecutar un comando después de la desinstalación

¿Alguna sugerencia sobre cómo puedo lograr lo anterior?

Respuesta

9

Consulte "Uninstall Event Functions" en la documentación. Puede usar, por ejemplo, CurUninstallStepChanged cuando 'CurUninstallStep' es 'usPostUninstall'.

+0

Gotcha - muchas gracias! – eyoopmeduck

+0

@eyoopmeduck - si eso resolvió su problema, debe aceptar la respuesta: use la marca grande/marca de verificación al lado de la respuesta. – Vicky

+0

Vaya, disculpa, esta es mi primera pregunta. Saludos, Mark. – eyoopmeduck

4

De la misma forma que hay una sección [Ejecutar], Inno le permite definir una sección [UninstallRun] para especificar qué archivos de su paquete de Instalador deben ejecutarse al desinstalar.

Por ejemplo:

[UninstallRun] 
Filename: {app}\Scripts\DeleteWindowsService.bat; Flags: runhidden; 

Alternativamente, solución propuesta por @Sertac Akyuz, que hace uso de las funciones de eventos se puede utilizar para tunning acciones un poco más unistalling. Aquí hay un ejemplo del uso de la función CurUninstallStepChanged entre otras funciones relacionadas.

https://github.com/HeliumProject/InnoSetup/blob/master/Examples/UninstallCodeExample1.iss

; -- UninstallCodeExample1.iss -- 
; 
; This script shows various things you can achieve using a [Code] section for Uninstall 

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 
DefaultGroupName=My Program 
UninstallDisplayIcon={app}\MyProg.exe 
OutputDir=userdocs:Inno Setup Examples Output 

[Files] 
Source: "MyProg.exe"; DestDir: "{app}" 
Source: "MyProg.chm"; DestDir: "{app}" 
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 

[Code] 
function InitializeUninstall(): Boolean; 
begin 
    Result := MsgBox('InitializeUninstall:' #13#13 'Uninstall is initializing. Do you really want to start Uninstall?', mbConfirmation, MB_YESNO) = idYes; 
    if Result = False then 
    MsgBox('InitializeUninstall:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); 
end; 

procedure DeinitializeUninstall(); 
begin 
    MsgBox('DeinitializeUninstall:' #13#13 'Bye bye!', mbInformation, MB_OK); 
end; 

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
begin 
    case CurUninstallStep of 
    usUninstall: 
     begin 
     MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall is about to start.', mbInformation, MB_OK) 
     // ...insert code to perform pre-uninstall tasks here... 
     end; 
    usPostUninstall: 
     begin 
     MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK); 
     // ...insert code to perform post-uninstall tasks here... 
     end; 
    end; 
end; 
+1

El OP había declarado explícitamente que '[UninstallRun]' no era adecuado debido al orden de instalación. – Deanna

Cuestiones relacionadas