2011-09-13 2 views
5

J'ai besoin de ma désinstallation pour exécuter une commande après il est supprimé les fichiers qu'il a installés. [UninstallRun] ne sert à rien si je comprends bien qu'il s'exécute AVANT que les fichiers ne soient supprimés. J'ai besoin d'un drapeau "postuninstall".Exécuter une commande après la désinstallation

Des suggestions sur la façon dont je peux accomplir ce qui précède?

Répondre

9

Voir "Uninstall Event Functions" dans la documentation. Vous pouvez utiliser par exemple CurUninstallStepChanged lorsque 'CurUninstallStep' est 'usPostUninstall'.

+0

Gotcha - merci beaucoup! – eyoopmeduck

+0

@eyoopmeduck - Si cela résout votre problème, vous devez accepter la réponse - utilisez la grosse coche/coche à côté de la réponse. – Vicky

+0

Oups - désolé - c'est ma première question. Cordialement Mark. – eyoopmeduck

4

De la même manière qu'il existe une section [Exécuter], Inno vous permet de définir une section [UninstallRun] pour spécifier quels fichiers de votre package Installer doivent être exécutés sur unistall.

Par exemple:

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

Alternativement, la solution proposée par @Sertac Akyuz, qui utilise des fonctions d'événement peut être utilisé pour tunning un peu plus d'actions unistalling. Voici un exemple de l'utilisation de la fonction CurUninstallStepChanged parmi d'autres fonctions connexes.

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

L'OP avait explicitement déclaré que '[UninstallRun]' n'était pas approprié en raison de l'ordre d'installation. – Deanna

Questions connexes