Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à vous,
Je voudrais savoir si vous utilisez l'objet de type 'projet' pour gérer les numéros de version des exécutables ?
Comment puis-je faire pour récupérer ces numéros de version dans l'application pour les afficher dans une 'About' box par exemple ?
Sinon, comment est-ce que vous faites pour savoir de quelle version il s'agit ?
PS : Je ne parle pas d'outil de versioning comme CVS.
Merci de votre aide.
Thorben
Hors ligne
Bonjour, http://www.rgagnon.com/pbdetails/pb-0120.html
//To retrieve the version from an executable : //[local external function declaration] FUNCTION ulong GetFileVersionInfoSizeA & ( REF string lpFilename, REF ulong lpdwHandle ) & LIBRARY "version.dll" FUNCTION integer GetFileVersionInfoA & ( REF string lpFilename, REF ulong lpdwHandle, ulong dwLen, & REF string lpData ) & LIBRARY "version.dll" FUNCTION boolean VerQueryValueA & ( REF string lpBlock, string lpSubBlock, REF long lpBuffer, & REF uint puLen ) & LIBRARY "version.dll" SUBROUTINE CopyMemory & ( REF string d, long s, long l ) & LIBRARY "kernel32.dll" & ALIAS FOR RtlMoveMemory //[powerscript] ulong dwHandle, dwLength string ls_Buff, ls_key, ls_versioninfo uint lui_length long ll_pointer string as_filename = "d:\dev\pb6\myapp.exe" integer li_rc dwLength = GetFileVersionInfoSizeA( as_filename, dwHandle ) IF dwLength <= 0 THEN RETURN END IF ls_Buff = Space( dwLength ) li_rc = GetFileVersionInfoA( as_filename, dwHandle, dwLength, ls_Buff ) IF li_rc = 0 THEN RETURN END IF // the strange numbers below represents the country and language // of the version ressource. ls_key = "\StringFileInfo\040904e4\FileVersion" IF NOT VerQueryValueA( ls_buff, ls_key, ll_pointer, lui_length ) OR & lui_length <= 0 THEN ls_versioninfo = "?" ELSE ls_versioninfo = Space( lui_length ) CopyMemory( ls_versioninfo, ll_pointer, lui_length ) END IF Messagebox("version", ls_versioninfo)
Hors ligne
Merci erasorz,
Je vais essayer de mettre cela en place.
Par contre, je ne suis pas certain que je puisse utiliser le petit utilitaire en plus.
Mais on verra bien.
Thorben
Hors ligne
Thorben a écrit:
Par contre, je ne suis pas certain que je puisse utiliser le petit utilitaire en plus.
Je suis allé relire le poste du Real's Howto et l'utilitaire en question n'est pas nécessaire. L'article indique
By default, an executable produced by Powerbuilder shows the Powerbuilder version number not the version of the executable itself.
En fait le n° de version de PB est indiqué dans le champ InternalName. Mais les différents champs de l'onglet Version dans un projet de déploiement permettent de remplir toutes les infos voulues pour gérer les n°s de version de l'exécutable :
- FileVersion et ProductVersion comme champs textes libres
- FileVersion et ProductVersion comme série de 4 shorts x.y.z.t
Exemple sur un projet d'ici :
File Version Information :
CompanyName : Conceptware
FileDescription : Plexus - Bank regulatory reporting
FileVersion : 9040600
InternalName : PB 11.5.1
LegalCopyright : Copyright 1994-2011 Conceptware
ProductName : Plexus
ProductVersion : 9.4.6 interne 6
File/Product version : 9.4.6.0 / 9.4.6.0
Ici
- on se sert de FileVersion texte pour afficher dynamiquement le n° de version à l'utilisateur dans la barre de titre, la fenêtre "à propos de..."
- le champ FileVersion texte nous sert à spécifier quelle version mini de la base de donnée requise pour cette version de l'application
- et les champs versions numériques sont testés par notre setup pour déterminer le comportement attendu lors de l'installation (nouvelle install, mise à jour, downgrade...)
Hors ligne
Bonjour
Je n'ai pas réussi à faire fonctionner le code ci-dessus.
Par contre, dans la section Migration, Pic en avait proposer un autre en réponse à une question qui m'a bien aidé comme base de départ donc je mets le lien ici:
Migration de la version 8.0 à 11.0 : fonction Ansi/Unicode
Hors ligne