Partager via


Utilisation des informations de version

Un programme d’installation a généralement les objectifs suivants :

  • Pour placer les fichiers à l’emplacement approprié.
  • Pour informer l’utilisateur si le programme d’installation remplace un fichier existant par une version sensiblement différente, par exemple, en remplaçant un fichier en allemand par un fichier en anglais ou en remplaçant un fichier plus récent par un fichier plus ancien.

Lorsque vous écrivez le programme d’installation, vous devez disposer des informations suivantes pour chaque fichier :

  • Nom et emplacement du fichier (appelé fichier source).
  • Nom du fichier équivalent sur le disque dur de l’utilisateur (appelé fichier de destination). Ce nom est généralement identique au nom du fichier sur le disque d’installation.
  • Le partage status du fichier, c’est-à-dire si le fichier est privé pour l’application en cours d’installation ou peut être partagé par plusieurs applications.

Le programme d’installation peut utiliser la fonction VerFindFile pour déterminer où le fichier doit être copié sur le disque. Cette fonction peut également être utilisée pour spécifier si le fichier est privé dans l’application ou peut être partagé. Si un problème se produit lors de la recherche du fichier, VerFindFile retourne une valeur d’erreur. Par exemple, si le système utilise le fichier de destination, VerFindFile retourne VFF_FILEINUSE. Le programme d’installation doit informer l’utilisateur du problème et répondre à la décision de l’utilisateur de continuer ou de mettre fin à l’installation.

La fonction VerInstallFile copie le fichier source dans un fichier temporaire dans le répertoire spécifié par VerFindFile. Si nécessaire, VerInstallFile développe le fichier à l’aide des fonctions de la bibliothèque de décompression des données.

VerInstallFile compare les informations de version du fichier temporaire à celles du fichier de destination. Si les deux diffèrent, VerInstallFile retourne une ou plusieurs valeurs d’erreur. Par exemple, il retourne VIF_SRCOLD si le fichier temporaire est antérieur au fichier de destination et VIF_DIFFLANG si les fichiers ont des identificateurs de langue ou des valeurs de page de code différents. Le programme d’installation doit informer l’utilisateur du problème et répondre à la décision de l’utilisateur de continuer ou de mettre fin à l’installation.

Certaines erreurs VerInstallFile sont récupérables. Autrement dit, le programme d’installation peut à nouveau appeler VerInstallFile , en spécifiant l’option VIFF_FORCEINSTALL , pour installer le fichier, quel que soit le conflit de version. Si VerInstallFile retourne VIF_TEMPFILE et que l’utilisateur choisit de ne pas forcer l’installation, le programme d’installation doit supprimer le fichier temporaire.

VerInstallFile a pu rencontrer une erreur irrécupérable lors de la tentative d’installation forcée, même si l’erreur n’existait pas auparavant. Par exemple, le fichier peut être verrouillé par un autre utilisateur avant que le programme d’installation ne tente de forcer l’installation. Si un programme d’installation tente de forcer l’installation après une erreur non récupérable, VerInstallFile échoue. Le programme d’installation doit contenir des routines pour récupérer à partir de ce type d’erreur.

La solution recommandée consiste à afficher une boîte de dialogue avec les boutons Installer, Ignorer et Installer tout. (Une autre solution est une boîte de dialogue avec les boutons Oui, Oui à Tout, Ignorer et Annuler.) Le bouton Installer tout doit empêcher le programme d’installation d’inviter l’utilisateur à signaler des erreurs similaires en incluant l’option VIFF_FORCEINSTALL dans toutes les utilisations ultérieures de VerInstallFile. Pour les erreurs irrécupérables, les boutons Installer et Installer tous doivent être désactivés.

Pour afficher un message d’erreur utile à l’utilisateur, le programme d’installation doit généralement récupérer des informations à partir des ressources de version des fichiers en conflit. Le programme d’installation peut utiliser quatre fonctions à cet effet :

GetFileVersionInfoSize retourne la taille des informations de version. GetFileVersionInfo utilise les informations récupérées par GetFileVersionInfoSize pour récupérer une structure qui contient les informations de version. VerQueryValue récupère un membre spécifique de cette structure.

Par exemple, si VerInstallFile retourne l’erreur VIF_DIFFTYPE , le programme d’installation doit utiliser les fonctions GetFileVersionInfoSize, GetFileVersionInfo et VerQueryValue sur les fichiers temporaires et de destination pour obtenir le type général de chaque fichier. Si les langues des fichiers sont en conflit, le programme d’installation doit également utiliser VerLanguageName pour traduire l’identificateur de langue binaire en une représentation textuelle de la langue. (Par exemple, 0x040C se traduit par la chaîne « Français. »)

Si VerInstallFile retourne une erreur de fichier, telle que VIF_ACCESSVIOLATION, le programme d’installation doit utiliser la fonction GetLastError pour récupérer la valeur d’erreur la plus récente. Le programme doit traduire cette valeur en un message d’information à afficher à l’utilisateur. Le programme ne doit pas contrôler les appels à VerInstallFile et GetLastError.