Page 1 sur 1
[C] Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 10:28
par mimione
Bonjour
Pour retrouver la version d'un programme AutoIt compilé, j'utilise l'instruction "FileGetVersion(@ScriptName)".
Un peu lassé de me battre contre les divers antivirus (notamment lorsque les programmes doivent être distribués sur plusieurs machines chez plusieurs utilisateurs), j'envisage de compiler en "a3x", quitte à distribuer simultanément une copie de "AutoIt3.exe".
PROBLÈME: l'instruction "FileGetVersion(@ScriptName)" ne fonctionne plus (le "@ScriptName" est le nom du fichier a3x, qui ne porte pas de N° de version).
La version lors de la compilation en "a3x" est bien inscrite dans le fichier source "au3", possiblement dans le "a3x", mais je ne vois pas comment la récupérer.
Une idée ?
Bonne journée,
M.C.
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 11:13
par Tlem
Bonjour.
Étant donné qu'un fichier .a3x n'est qu'un fichiers texte, vous ne pourrez utiliser la ressource version.
Il me semble par contre qu'il est possible d'en utiliser d'autres.
Après il faut bidouiller :
- Un autre fichier qui contient la version (.ini, .ver, etc...).
- Une option en ligne de commande qui retourne la version (Autoit3.exe monprog.a3x /v).
- Une clé de base de registre (Si le programme a été lancé).
- Ou tout autre solutions adaptée à votre situation.
Ps : Je fais la réponse de mon smartphone, donc je n'ai pas tout vérifié ^^).
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 11:33
par mikell
Qu'est-ce que ça donne avec le script cy-dessous (compilé en a3x) ?
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_Outfile_type=a3x#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****#pragma compile(Out, myProg.a3x)#pragma compile(FileDescription, myProg - a description of the application)#pragma compile(ProductName, myProg)#pragma compile(ProductVersion, 3.7)#pragma compile(FileVersion, 3.7.0.0, 3.7.100.201) ; The last parameter is optional.#pragma compile(LegalCopyright, © Joe Bloggs)#pragma compile(LegalTrademarks, '"Trademark something, and some text in "quotes" etc...')#pragma compile(CompanyName, 'Joe Bloggs & Co')#include <MsgBoxConstants.au3>If @Compiled Then Example
()Else MsgBox($MB_SYSTEMMODAL, "", "Please compile before running.")EndIfFunc Example
() Local $sFileVersion = FileGetVersion(@scriptdir & "\myProg.a3x") ; Local $sFileVersion = FileGetVersion(@scriptname) ; <== marche aussi MsgBox($MB_SYSTEMMODAL, "", $sFileVersion)EndFunc ;==>Example
Chez moi ça marche, même en récupérant la version depuis un script externe
MsgBox(0, "", FileGetVersion(@scriptdir & "\myProg.a3x") )
Tlem a écrit : ↑sam. 10 avr. 2021 11:13
... un fichier .a3x n'est qu'un fichier texte ...
Thierry !!

Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 11:42
par Tlem
Oui, je me souviens maintenant.
Windows n'affiche pas directement les infos de version pour ce type de fichier, mais elles sont là malgré tout. ^^
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 11:49
par mikell
Sur mon vieil OS, en compilant le code cy-dessus, si je clique droit sur le a3x > Propriétés > Version , j'ai bien toutes les infos affichées
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 12:01
par Tlem
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 12:15
par mikell
J'ai bien dit : sur mon vieil OS
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 12:28
par Tlem

XP !!!
Ha mais là, c'est d'un autre temps ...

Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 13:52
par mikell
Certes mais ça marche, et très bien en plus
Mais c'est un détail, le plus important c'est que mimione arrive à récupérer ses infos ^^
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : sam. 10 avr. 2021 14:38
par jchd
On peut aussi faire ça "à la pépère" : encoder la version x.y.z dans l'heure de création du fichier .a3x en laissant la date du jour.
En couvrant de 0.0.0 à 23.59.59, ça laisse le temps de pas mal de versions et comme à priori les versions croissantes sortent à des dates croissantes, le tri par date de fichier reste correct.
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : dim. 11 avr. 2021 06:25
par mimione
Hello !
Le code proposé par mikel fonctionne effectivement, mais je vais faire la fine bouche !
Le "FileGetVersion" récupère le numéro de version indiqué par la directive "#pragma compile(FileVersion, 3.7.0.0, 3.7.100.201)"
Le hic, c'est que l'option "Auto Increment" de la fenêtre de compilation incrémente la version spécifiée par "#AutoIt3Wrapper_Res_Fileversion".
C'est bien cette dernière directive qui sert pour un "FileGetVersion" sur un exécutable "exe", le N° de version est alors correctement incrémenté et lu.
Et cette option "Auto Increment" est quand même bigrement pratique (voire indispensable à mon avis)...
Bigre, bigre.
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : dim. 11 avr. 2021 11:44
par mikell
Ayant répondu (correctement je crois) à la question-titre, je laisse le soin des détails à la charge de l'utilisateur
D'autant plus que l'absence de fourniture d'un code d'exemple pour montrer "ce qui ne va pas" n'incite pas vraiment à des efforts démesurés
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : lun. 12 avr. 2021 15:56
par mimione
Ce qui ne va pas me semble parfaitement décrit dans mon post précédent, et se produit avec votre code du 10 avr. 2021, 11:33
Une nouvelle compilation en "a3x" avec l'option "AutoIncrement" n'incrémentera pas le numéro de version récupéré.
Restons en là.
Merci pour vos propositions.
M.C.
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : lun. 12 avr. 2021 16:27
par Nine
Je ne sais si ta bouche est fine pour cette proposition
Mais avec ces directives, ça fonctionne presque :
Code : Tout sélectionner
#AutoIt3Wrapper_Outfile_type=a3x
#AutoIt3Wrapper_Res_Fileversion=4.4.4.6
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#pragma compile(Out, Temp6.a3x)
;#pragma compile(Fileversion, 4.4.4.7)
Tant que la dernière ligne est commentée, l'autoincrement va faire son travail. Lorsque l'on veut une compilation finale, on enlève le commentaire et voilà tout se remet en place correctement.
Re: Récupérer le numéro de version d'un fichier "a3x"
Posté : mar. 13 avr. 2021 06:50
par mimione
Mmmmmouai....
Il y a quand même des conflits difficiles à appréhender entre les directives "#AutoIt3Wrapper" et "#pragma compile".
Ajoutons le comportement différent du "FileGetVersion" en exe et en a3x, et l'utilisation reste piègeuse.
L' AutoIncrement est un confort, mais s'il faut composer avec les comportements curieux des directives, ce n'est pas la peine.
Je pense que je vais creuser du côté de la toute première proposition de Thierry, en lançant avec le "Run Before/After" de la fenêtre "AutoIt3Wrapper" un script qui ira renseigner un fichier INI.
Merci pour vos tentatives.
M.C.