Uso de la información de versión

Normalmente, un programa de instalación tiene los siguientes objetivos:

  • Para colocar los archivos en la ubicación correcta.
  • Para notificar al usuario si el programa de instalación reemplaza un archivo existente por una versión que es significativamente diferente, por ejemplo, reemplazando un archivo en alemán por un archivo en inglés o reemplazando un archivo más reciente por un archivo anterior.

Al escribir el programa de instalación, debe tener la siguiente información para cada archivo:

  • Nombre y ubicación del archivo (denominado archivo de origen).
  • Nombre del archivo equivalente en el disco duro del usuario (denominado archivo de destino). Este nombre suele ser el mismo que el nombre de archivo en el disco de instalación.
  • El estado de uso compartido del archivo, es decir, si el archivo es privado para la aplicación que se está instalando o puede compartirlo varias aplicaciones.

El programa de instalación puede usar la función VerFindFile para determinar dónde se debe copiar el archivo en el disco. Esta función también se puede usar para especificar si el archivo es privado para la aplicación o se puede compartir. Si se produce un problema al buscar el archivo, VerFindFile devuelve un valor de error. Por ejemplo, si el sistema usa el archivo de destino, VerFindFile devuelve VFF_FILEINUSE. El programa de instalación debe notificar al usuario el problema y responder a la decisión del usuario de continuar o finalizar la instalación.

La función VerInstallFile copia el archivo de origen en un archivo temporal en el directorio especificado por VerFindFile. Si es necesario, VerInstallFile expande el archivo mediante las funciones de la biblioteca de descompresión de datos.

VerInstallFile compara la información de versión del archivo temporal con el del archivo de destino. Si los dos difieren, VerInstallFile devuelve uno o varios valores de error. Por ejemplo, devuelve VIF_SRCOLD si el archivo temporal es anterior al archivo de destino y VIF_DIFFLANG si los archivos tienen distintos identificadores de idioma o valores de página de códigos. El programa de instalación debe notificar al usuario el problema y responder a la decisión del usuario de continuar o finalizar la instalación.

Algunos errores verInstallFile son recuperables. Es decir, el programa de instalación puede llamar a VerInstallFile de nuevo, especificando la opción VIFF_FORCEINSTALL , para instalar el archivo independientemente del conflicto de versión. Si VerInstallFile devuelve VIF_TEMPFILE y el usuario decide no forzar la instalación, el programa de instalación debe eliminar el archivo temporal.

VerInstallFile podría encontrar un error irrecuperable al intentar forzar la instalación, aunque el error no existía anteriormente. Por ejemplo, otro usuario podría bloquear el archivo antes de que el programa de instalación intentara forzar la instalación. Si un programa de instalación intenta forzar la instalación después de un error no recuperable, se produce un error en VerInstallFile . El programa de instalación debe contener rutinas para recuperarse de este tipo de error.

La solución recomendada es mostrar un cuadro de diálogo con los botones Instalar, Omitir e Instalar todo. (Otra solución es un cuadro de diálogo con los botones , Sí a Todos, Omitir y Cancelar). El botón Instalar todo debe impedir que el programa de instalación solicite al usuario errores similares incluyendo la opción VIFF_FORCEINSTALL en todos los usos posteriores de VerInstallFile. Para los errores irrecuperables, se deben deshabilitar los botones Instalar e instalar todos .

Para mostrar un mensaje de error útil al usuario, el programa de instalación normalmente debe recuperar información de los recursos de versión de los archivos en conflicto. Hay cuatro funciones que el programa de instalación puede usar para este propósito:

GetFileVersionInfoSize devuelve el tamaño de la información de versión. GetFileVersionInfo usa la información recuperada por GetFileVersionInfoSize para recuperar una estructura que contiene la información de versión. VerQueryValue recupera un miembro específico de esa estructura.

Por ejemplo, si VerInstallFile devuelve el error VIF_DIFFTYPE , el programa de instalación debe usar las funciones GetFileVersionInfoSize, GetFileVersionInfo y VerQueryValue en los archivos temporales y de destino para obtener el tipo general de cada archivo. Si los idiomas de los archivos entran en conflicto, el programa de instalación también debe usar VerLanguageName para traducir el identificador de idioma binario en una representación de texto del idioma. (Por ejemplo, 0x040C se traduce en la cadena "francés").

Si VerInstallFile devuelve un error de archivo, como VIF_ACCESSVIOLATION, el programa de instalación debe usar la función GetLastError para recuperar el valor de error más reciente. El programa debe traducir este valor en un mensaje informativo que se mostrará al usuario. El programa no debe producir control entre las llamadas a VerInstallFile y GetLastError.