2012-09-28 11 views
8

El programa que estoy construyendo un instalador usa las entradas de registro para almacenar la configuración del usuario. En este momento lo tengo configurado para eliminar dichos archivos de registro cuando se desinstala el programa, pero me gustaría la posibilidad de dar a los usuarios la opción de conservar o eliminar los archivos de registro después de la desinstalación.Inno Setup - Desinstalar la opción de eliminación del registro

No soy el mejor programador/programador, por lo que cuanto más simple sea la respuesta, mejor.

Mi registro/desinstalación se ve así actualmente.

[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

Tenga en cuenta que no es necesario '[] 'UninstallDelete entradas para cualquier cosa que se instalan por una entrada' [Archivos] '- que están desinstalados por defecto de todos modos. – Miral

Respuesta

16

InnoSetup no tiene ningún parámetro de comprobación de desinstalación condicional, por lo que debe hacerlo usted mismo. Por lo tanto, debe eliminar el indicador uninsdeletekey que eliminaría automáticamente la clave de registro y, al final del proceso de desinstalación, puede preguntar al usuario si desea eliminar esa clave (de alguna manera significativa) y eliminarla manualmente. El siguiente script hace esto en el paso posterior a la desinstalación, ¿cuál es el momento en que la aplicación se desinstaló correctamente? Puede seguir el 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

Gracias, hombre, realmente lo aprecio. Me salvó un poco de dolor de cabeza y de ahora en adelante me aseguraré de referirme a esto. – user1706975

+2

Tenga en cuenta que, como máximo, eliminará la clave de un usuario. Si la aplicación se instala por máquina y varios usuarios la ejecutan, la configuración se mantendrá para todos menos para el que ejecute el desinstalador. Si eso te molesta, no hay ninguna solución para esto, excepto hacer tu instalación por usuario en su lugar ('PrivilegesRequired = lowest'), que a su vez viene con restricciones sobre dónde puedes instalar y qué banderas puedes usar. – Miral

Cuestiones relacionadas