2012-09-28 15 views
8

Il programma Sto costruendo un programma di installazione per utilizzare le voci di registro per memorizzare le impostazioni dell'utente. In questo momento ho impostato per eliminare i file di registro quando il programma viene disinstallato, ma vorrei poter dare agli utenti un'opzione per mantenere o eliminare i file di registro dopo la disinstallazione.Inno Setup - Disinstalla l'opzione di rimozione del registro di sistema

Non sono il miglior programmatore/programmatore, quindi più semplice è la risposta, meglio è.

Al momento il mio registro/disinstallazione è simile a questo.

[Registry] 
    Root: HKCU; Subkey: "Software\FFSPLIT Overlay Filter"; Flags: uninsdeletekey 


    [UninstallDelete] 
    Type: filesandordirs; Name: "{app}\ffmpeg" 
    Type: filesandordirs; Name: "{app}\OverlayData" 
    Type: files; Name: "{app}\AForge.Controls.dll" 
    Type: files; Name: "{app}\AForge.Imaging.dll" 
    Type: files; Name: "{app}\AForge.Video.DirectShow.dll" 
    Type: files; Name: "{app}\AForge.Video.dll" 
    Type: files; Name: "{app}\AudioFilter.ax" 
    Type: files; Name: "{app}\default.cfg" 
    Type: files; Name: "{app}\DirectShowLib-2005.dll" 
    Type: files; Name: "{app}\ffmpeg.exe" 
    Type: files; Name: "{app}\FFSplit Overlay Filter.ax" 
    Type: files; Name: "{app}\FFsplit.exe" 
    Type: files; Name: "{app}\FFSplitOverlayManager.exe" 
    Type: files; Name: "{app}\librtmp.dll" 
    Type: files; Name: "{app}\msvcp100d.dll" 
    Type: files; Name: "{app}\msvcr100d.dll" 
    Type: files; Name: "{app}\NAudio.dll" 
    Type: files; Name: "{app}\RegisterFilter.bat" 
    Type: files; Name: "{app}\setting.cfg" 
    Type: files; Name: "{app}\UNRegisterFilter.bat" 
    Type: files; Name: "{app}\wavbuffer" 
    Type: files; Name: "{app}\Micfilter.ax" 
+3

Si noti che non è necessario [UninstallDelete] '' voci per tutto ciò che è installato da un [file] '' ingresso - sono disinstallati per default in ogni caso. – Miral

risposta

16

InnoSetup non ha alcun parametro di controllo di disinstallazione condizionale, quindi è necessario farlo da soli. Quindi è necessario rimuovere il flag uninsdeletekey che eliminerebbe automaticamente la chiave di registro e al termine del processo di disinstallazione è possibile chiedere all'utente se desidera eliminare quella chiave (in un modo significativo per i messaggi) ed eliminare la chiave manualmente. Lo script seguente esegue questa operazione nel passaggio di disinstallazione post, qual è il momento in cui l'applicazione è stata disinstallata con successo. È possibile seguire il commented version:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

#define FilterRegKey "Software\FFSPLIT Overlay Filter" 

[Registry] 
Root: HKCU; Subkey: "{#FilterRegKey}" 

[Code] 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
begin 
    if CurUninstallStep = usPostUninstall then 
    begin 
    if RegKeyExists(HKEY_CURRENT_USER, '{#FilterRegKey}') then 
     if MsgBox('Do you want to delete the overlay filter registry key ?', 
     mbConfirmation, MB_YESNO) = IDYES 
     then 
     RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, '{#FilterRegKey}'); 
    end; 
end; 
+1

Grazie amico, lo apprezzo davvero. Mi ha risparmiato un bel po 'di mal di testa e sarò sicuro di fare riferimento a questo d'ora in poi. – user1706975

+2

Si noti che questo rimuoverà al massimo la chiave da un utente. Se l'app è installata per macchina e più utenti la eseguono, le impostazioni rimarranno per tutti tranne quello che succede per eseguire il programma di disinstallazione. Se ciò ti infastidisce, non c'è soluzione per questo, tranne effettuare l'installazione per utente ('PrivilegesRequired = lowest'), che a sua volta ha delle restrizioni su dove puoi installare e su quali flag puoi usare. – Miral

Problemi correlati