es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparar rutas en Inno Setup

¿Existe una forma integrada de comparar dos cadenas que representan rutas en Inno Setup Pascal? Si no es con una función, ¿quizás a través de alguna normalización de la ruta?

Comparar cadenas de forma ingenua no es obviamente correcto, incluso si ignoramos mayúsculas y minúsculas con SameText() (según las reglas de Windows).

Como mínimo, la comparación correcta debe:

  • Tratar \ y / como idénticos
  • Ignorar múltiples separadores como \\ (tratarlos como uno, como lo hace el sistema operativo)
  • Ignorar separadores finales (para comparar correctamente las rutas de directorio, para lo que se necesita principalmente)
  • Resolver rutas (foo\..\bar es igual a bar, al menos si foo existe)
  • etc. (las reglas son bien conocidas)
  • No requerir que las rutas existan realmente en el sistema de archivos.

Resolver rutas absolutas vs. relativas es una ventaja, pero requiere especificar la ruta actual. Tal vez CWD esté bien, pero no estoy seguro de que Inno acepte rutas de instalación relativas de todos modos.

Esto debe ser una tarea bastante común para un instalador, pero estoy sorprendido de no encontrar una solución fácil pero correcta…

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Después de realizar una investigación, parece que no hay una función integrada en Inno Setup Pascal para comparar dos cadenas que representan rutas. Sin embargo, es posible lograr una comparación correcta normalizando las rutas utilizando funciones como ExpandUNCFileName y ExtractRelativePath antes de compararlas. Además, es importante tratar \ y / como idénticos, ignorar múltiples separadores, ignorar separadores finales y resolver rutas. Resolver rutas absolutas versus relativas es un bonus, pero requiere especificar la ruta actual. Es sorprendente que no haya una solución fácil considerando que esta es una tarea común para un instalador.

Comments are closed.