tutorial setup inno for descargar inno-setup

for - ¿Cómo configurar Inno Setup para desinstalar todo?



inno setup tutorial (9)

Soy nuevo en Inno Setup. Atrapado en un problema ~ cómo configurar la pieza de desinstalación para eliminar todos los archivos, carpetas, subcarpetas e incluso nuevos archivos / carpetas, etc. creados por la aplicación (en otras palabras, una eliminación del 100% de la aplicación y los archivos asociados).

Busqué por aquí y también en su foro, y subí vacío. ¿Alguien puede indicarme un documento, preguntas frecuentes, etc. sobre cómo hacer esto?

ACTUALIZAR

Gracias por todos los comentarios hasta ahora (muy impresionante). Parece que puedo eliminar todo usando la directiva {app} *. * En la sección de desinstalación. También parece que todo el mundo está aconsejando en contra. Entonces, la pregunta ahora se convierte en (me pregunto si esto debería ser una pregunta totalmente nueva) ¿hay alguna manera durante la desinstalación que podamos preguntarle al usuario ''¿Desea eliminar todos los archivos de proyecto asociados con esta aplicación?'' y si responden SÍ, ¿para ejecutar la pieza de desinstalación {app} *. *?

Gracias -


¿No es ese el valor predeterminado si no especificas "uninsneveruninstall" para una entrada?

editar - Lo siento, no me había dado cuenta de que estabas hablando de archivos de datos recién creados.


Añadir eliminar el archivo / elemento de carpeta en Inno Setup studio. O directamente use el script de la siguiente manera.

[Ejemplo de código generado]

[UninstallDelete] Type: filesandordirs; Name: "{app}/unnecessary_files"


Creo que el enfoque recomendado es especificar qué eliminar en la sección de desinstalación. El razonamiento es que, ¿qué sucede si, por cualquier motivo, el usuario decidió colocar sus propios archivos en el directorio de instalación que no deseaba eliminar, o los datos guardados que tal vez desee conservar (tal vez, la desinstalación es para instalar una versión más reciente? )

Dicho esto, no sé de antemano cuál es la secuencia de comandos, pero si usa ISTool (muy recomendable), simplemente acceda a la sección Eliminar eliminación de desinstalación y agregue las cosas que desea eliminar. Debe presentar todas las opciones posibles en una interfaz gráfica de usuario agradable y generar el script para usted.

Edición: Un ejemplo de la documentación de Inno Setup:

[UninstallDelete] Type: files; Name: "{win}/MYPROG.INI"

Pero ellos fuertemente no hacen algo como

[UninstallDelete] Type: files; Name: "{app}/*.*"

NOTA: No intente usar un comodín aquí para eliminar todos los archivos en el directorio {aplicación}. Recomiendo encarecidamente no hacer esto por dos razones. Primero, los usuarios generalmente no aprecian que se eliminen los archivos de datos que colocaron en el directorio de la aplicación sin previo aviso (es posible que solo lo estén desinstalando porque, por ejemplo, quieren moverlo a otra unidad). Es mejor dejarlo en manos de los usuarios finales para eliminarlos manualmente si lo desean. Además, si el usuario instaló el programa en el directorio incorrecto por error (por ejemplo, C: / WINDOWS) y luego fue a desinstalarlo, podría haber consecuencias desastrosas. Así que de nuevo, ¡NO HAGAS ESTO!


Esto debería funcionar:

[Dirs] Name: "{app}"; Flags: uninsalwaysuninstall


Hay casos para querer eliminar archivos que no se escribieron inicialmente en el disco del usuario en el momento de la instalación. Uno de estos casos es cuando tiene una aplicación que se actualiza cuando se inicia. Los archivos nuevos se pueden agregar al disco de esta manera que no forman parte del desinstalador.

Para este caso, le sugiero que cree un archivo "manifiesto de parche" que mantenga un registro en ejecución de qué archivos deberían estar en el directorio {aplicación}. A continuación, encontrará una muestra de código que se lee de un archivo en el directorio {app} llamado ''patch_manifest.txt''

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var i: Integer; arrayLen: Longint; item: String; itemsToDelete: Array of String; begin case CurUninstallStep of usUninstall: begin LoadStringsFromFile(ExpandConstant(''{app}'') + ''/patch_manifest.txt'', itemsToDelete); arrayLen := GetArrayLength(itemsToDelete); for i := 0 to arrayLen-1 do begin item := ExpandConstant(''{app}'') + ''/' + itemsToDelete[i]; if FileExists(item) then DeleteFile(item); if DirExists(item) then RemoveDir(item); end; end; end; end;

y una muestra del patch_manifest.txt

data/something_here.dat data/moredatahere.dat data/ Launcher.exe patch_manifest.txt

Nota: El orden de las líneas en el patch_manifest es importante. Todos los archivos dentro de un directorio deben primero ser listados seguidos por el directorio, los directorios que no están vacíos no se pueden eliminar.

Su aplicación debe enviarse con un patch_manifest y el patch_manifest debe actualizarse con cada parche. Haga que esta parte de su proceso de compilación no se olvide de actualizarla.

Es muy importante que no borre por comodín ( . ) Incluso si se lo solicita al usuario. Los desinstaladores tienen privilegios elevados que potencialmente podrían destruir la computadora de un usuario. Tomemos el caso de un usuario que accidentalmente instaló su aplicación en C: / Windows / o C: / Archivos de programa.

Otra buena idea es verificar que el archivo es, de hecho, "su archivo" realizando una comprobación MD5 antes de eliminarlo. En este caso, su patch_manifest.txt no solo incluiría la ruta relativa al archivo, sino también la suma de comprobación MD5.


No puede usar InnoSetup para desinstalar cualquier cosa que no haya instalado, y no debería querer hacerlo. Por mi parte, me sentiría muy descontento si instalé una aplicación, ingresé una gran cantidad de datos y luego decidí usar otra cosa en lugar de leer esos datos de su aplicación. Si tu desinstalación eliminó todo el trabajo que ya había hecho, podría tener la tentación de venir a buscarte. Y probablemente no te compre una taza de café.

O considere el caso donde instalo su aplicación en el proceso de evaluar varios. Intento con las aplicaciones y vuelvo a las suyas porque me gusta un poco más y cada vez que ingrese más datos. Entonces decido no hacer nada por un tiempo, así que elimino todas las aplicaciones de prueba. En una semana, decido que necesito usar su aplicación ahora, después de todo, y la reinstalo. Ups! Todo el trabajo que hice para probarlo y que ahora quería usar se ha ido.

Lo anterior es por qué, cuando desinstalas una aplicación, deja atrás todo lo que creaste en las carpetas, como archivos de configuración, archivos de datos, etc. No sabe qué quieres que haga con ellos, por lo que los deja solos.


Para borrar todo lo que uso esto:

[UninstallDelete] Type:files; Name: "{app}"


Probablemente debería haber hecho de esto una pregunta totalmente nueva, pero también responderé aquí su pregunta actualizada. Eche un vistazo a la sección "Scripting Pascal: código de desinstalación" en la documentación de Inno Setup.

Para dar un ejemplo de cómo eliminar condicionalmente los archivos de datos como parte del proceso de desinstalación:

[Code] procedure DeleteBitmaps(ADirName: string); var FindRec: TFindRec; begin if FindFirst(ADirName + ''/*.*'', FindRec) then begin try repeat if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then begin if (FindRec.Name <> ''.'') and (FindRec.Name <> ''..'') then begin DeleteBitmaps(ADirName + ''/' + FindRec.Name); RemoveDir(ADirName + ''/' + FindRec.Name); end; end else if Pos(''.bmp'', AnsiLowerCase(FindRec.Name)) > 0 then DeleteFile(ADirName + ''/' + FindRec.Name); until not FindNext(FindRec); finally FindClose(FindRec); end; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usUninstall then begin if MsgBox(''Do you want to delete all data files?'', mbConfirmation, MB_YESNO) = IDYES then begin DeleteBitmaps(ExpandConstant(''{app}'')); end; end; end;

Pero dependiendo de la cantidad de cosas que necesita limpiar, puede que sea mejor crear un programa de ayuda especial que sea parte de la instalación, y que se pueda ejecutar durante la desinstalación de la aplicación (usando una entrada en [UninstallRun] sección).


Quería eliminar gData.dat que se creó en el tiempo de ejecución en la carpeta instalada

y estaba trabajando bien para mi

[UninstallDelete] Type: files; Name: "{app}/gData.dat"