Support pour Winamp, Windows Media Player, Media Center et VLC.

VPATCH


Tutorial pour apprentis

Utilité

Comme son nom l’indique, il sert à patcher un fichier au lieu de devoir l’installer complètement. Très pratique, pour des traductions, surtout lorsque la taille du fichier résultant est importante.
VPatch est installé par défaut avec NSIS. Vous le trouverez dans "C:\Program Files\NSIS\Contrib\VPatch.
Il est possible de patcher n’importe quel type de fichier (exe, ini, txt, doc …) tous les fichiers sont compatibles.

Comment cela fonctionne ?

Tout d’abord, il est nécessaire de créer un fichier "patch", ne comprenant que les données modifiées (donc plus léger que l'original). Ensuite, on va, avec ce fichier, aller patcher le fichier d’origine pendant l’installation.

Comment créer un fichier "patch" ?

Pour cela on a besoin du fichier GenPat.exe que l’on trouve dans le dossier de VPatch. Ensuite il faut utiliser des lignes de commandes pour faire le patch. La commande à utiliser est :

GenPat fichier_d_origine fichier_final nom_du_patch

Astuce : Copiez GenPat.exe dans le dossier qui contient le fichier d’origine (fichier_vo.exe) et le fichier final (fichier_traduit.exe). Puis, créez un fichier bat dans ce dossier avec la commande suivante :

GenPat fichier_vo.exe fichier_traduit.exe patch.pat

Il ne reste plus qu’à double-cliquer sur le fichier bat pour que le fichier patch.pat soit créé. C’est ce fichier qui va être utilisé dans votre installation. La taille de ce fichier doit être nettement inférieure à celle du fichier final, sinon, cela ne sert à rien d’utiliser cette méthode.

Remarque : On peut remplacer le nom et l’extension du fichier patch par ce que l’on veut.

Comment créer mon script pour patcher un fichier ?

Maintenant que vous avez créé votre fichier patch, il reste à créer le script.
Il suffit de mettre dans votre section :

# On va extraire le patch dans le dossier des pluggins (dossier temporaire) InitPluginsDir File /oname=$PLUGINSDIR\patch.pat patch.pat # Mise à jour du fichier vpatch::vpatchfile "$PLUGINSDIR\patch.pat" "$INSTDIR\fichier_vo.exe" "$INSTDIR\fichier_traduit.exe"

Pour une meilleure présentation, on peut ajouter du texte :

# Afficher dans la fenêtre du détail d’installation DetailPrint "Mise à jour du fichier fichier_vo.exe..." vpatch::vpatchfile "$PLUGINSDIR\patch.pat" "$INSTDIR\fichier_vo.exe" "$INSTDIR\fichier_traduit.exe" # Afficher le résultat Pop $R0 DetailPrint "Resultat: $R0"

Le résultat est important car pour fonctionner le fichier d’origine doit bien être le même que celui que vous avez utiliser pour créer votre patch.

Il ne reste plus qu’à supprimer l’ancien fichier ou en faire une sauvegarde et donner le nom du fichier d’origine au fichier final :

CopyFiles "$INSTDIR\fichier_vo.exe " "$INSTDIR\fichier_vo.bak" Delete $INSTDIR\fichier_vo.exe CopyFiles "$INSTDIR\fichier_traduit.exe " "$INSTDIR\fichier_vo.exe " Delete $INSTDIR\fichier_traduit.exe

Le fichier original est renommé en .bak et le fichier d’origine a été remplacé par le votre.

Comment tout automatiser ?

Il est assez simple de créer une macro qui fera exactement tout ce qui est indiqué plus haut :

!macro WAFR_PATCH DIR FILE ; Génération du patch en même temps que l'installation !system "GenPat en/${FILE} fr/${FILE} ${FILE}.pat" = 0 DetailPrint "Mise à jour de ${FILE}..." ; Récupération du fichier File /oname=$PLUGINSDIR\${FILE}.pat ${FILE}.pat ; Application du patch vpatch::vpatchfile "$PLUGINSDIR\${FILE}.pat" "${DIR}\${FILE}" "${DIR}\${FILE}.out" ; Suppression du fichier original Delete "${DIR}\${FILE}" ; On renomme le fichier patché pour que le nom corresponde à celui du patch Rename "${DIR}\${FILE}.out" "${DIR}\${FILE}" ; On vérifie si le processus s'est correctement déroulé Pop $R0 StrCmp $R0 "OK" +2 +1 DetailPrint "Erreur lors de la mise à jour ($R0)" ; Suppression du fichier patch généré plus haut !system "delete ${FILE}.pat" !macroend

Pour utiliser cette macro :

!insertmacro WAFR_PATCH "$INSTDIR\Plugins" gen_ml.dll

Attention : N'oubliez pas d'initialiser préalablement le répertoire des plugins
Note : Et oui, il s'agit bien d'une portion du patch de francisation de Winamp ;-)

Pour plus d'informations

Un exemple et la documentation en anglais sont disponibles dans le dossier de VPatch.



Une idée de pas à pas ?

Contactez Julien.