Page 1 sur 1
[R] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multiples
Posté : lun. 21 avr. 2014 02:36
par ZDS
Bonjour à tous,
Je me heurte à un gros problème de la commande "#AutoIt3Wrapper_Res_SaveSource=Y", qui ressemble plus à un bug du Wrapper qu'autre chose : Si j'utilise un
#include ".\MonProg\Misc.au3" dans un script "MonProg.au3", la source récupérable ne concerne que le fichier d'entrée "MonProg.au3" (qui ne contient pas grand chose à part les infos du Wrapper, les includes, et un modèle de code assez générique avec les définitions des fonctions onFirstLaunch(), onLaunch(), onExit(), onError(), onRestart(), etc), je n'arrive pas à obtenir le fichier "Misc.au3" (en utilisant ResHacker par exemple).
C'est quand même dommage, car j'ai l'habitude Java-iste de cloisonner les fonctionnalités dans des fichiers séparés :
- MonProg.au3
- MonProg (répertoire du même nom que le point d'entrée)
- Gui.au3
- Modelisation.au3
- Config.au3
- Compilation.au3
- Misc.au3
- etc...
Et je ne pense pas être le seul ^^ (c'est plus facile pour maintenir, et aussi pour travailler sur un projet en équipe)
J'ai vu que Tlem avait bossé sur les alternatives à ce souci sur le forum anglophone il y a quelques temps, sans trouver de solution au souci sur "#AutoIt3Wrapper_Res_SaveSource=Y", quelqu'un aurait-il eu plus de chance? Merci d'avance, et à bientôt !
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : lun. 21 avr. 2014 23:38
par Tlem
Le plus simple pour ajouter les sources est de faire une section spécifique de
FileInclude pour chaque fichier qui sera considéré important.
En ce qui me concerne, je rajoute systématiquement une section qui test les paramètres et si il trouve
/src alors il y a extraction des sources que j'aurais déterminé importantes.
Ça alourdit l'exe de quelques Ko, mais ça simplifié drôlement la récupération des sources.

Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 22 avr. 2014 09:32
par ZDS
Bonjour Tlem,
Merci de ta réponse, mais je voulais éviter cette solution. J'avais une préférence pour l'utilisation du Wrapper, mais ta technique serait envisageable si je pouvais par exemple y mettre en FileInstall un zip qui se serait créé automatiquement AVANT de l'ajouter à la compilation (car sinon, je suis obligé de faire un FileInstall pour chaque fichier, sachant que j'en ai des tonnes - l'exemple fourni étant simplifié au maximum).
Il existe sans doute un truc du genre Compile:@Before ou @After, mais je ne sais pas du tout les utiliser (RunBefore il me semble, je ne suis pas sur mon ordi directement). Quelqu'un aurait ça sous le coude?
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 22 avr. 2014 09:55
par TommyDDR
Je post un UDF qui vous sera surement utile, je repasse mettre le lien ici une fois fait.
EDIT :
Voila :
CreateFileInstall
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 22 avr. 2014 10:24
par Tlem
ZDS a écrit :je suis obligé de faire un FileInstall pour chaque fichier, sachant que j'en ai des tonnes
Effectivement, la solution du fichier compressé me paraît la plus indiquée en la circonstance.
ZDS a écrit :Il existe sans doute un truc du genre Compile:@Before ou @After, mais je ne sais pas du tout les utiliser (RunBefore il me semble,...
Oui il est possible d'utiliser une directive du wrapper pour lancer une commande avant la compilation. Ceci dit, d'après ce que vous décrivez, la compression manuelle des fichiers et dossiers nécessaires me semble plus indiquée. Après il suffit de rajouter (tout comme je l'ai fait pour le pack AutoIt Fr) l'utilisation d'une DLL de compression/décompression.
@Tommy
L'idée de la fonction CreateFileInstall est intéressante, mais il ne faut pas perdre de vue que la commande FileInstall n'a pas été conçue dans le but de rajouter des dizaines de fichiers à une compilation. Si des ressources (sous forme de dizaines ou centaines de fichiers) doivent être rajoutées, alors il vaut mieux privilégier la DLL de ressources ou plus simplement comme indiqué ci-dessus une archive compressée.
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 22 avr. 2014 10:47
par TommyDDR
J'ai eu des soucis avec la dll 7zip (DllOpen qui fail sur un PC du jour au lendemain, du coup je suis un peu sceptique quant à son utilisation maintenant).
Je te l'accorde, les FileInstall (j'en ai 510 dans mon script) s'exécutent en 4.5secondes sur un disque dur "normal" (quasi instantané sur un ssd).
Mais il faudrait que je me penche sur les dll de ressource un jour.
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 22 avr. 2014 15:36
par Tlem
Sinon, puisque feu XP n'est plus sensé être utilisé, les systèmes qui ont suivit prenaient en charge la décompression Zip.
Il me semble que sur le forum US il y a un UDF.
Après, il est aussi possible d'utiliser 7Za.exe et donc de s'affranchir de la DLL.
Envoyé depuis mon appareil mobile.
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 22 avr. 2014 18:23
par ZDS
Je n'ai pas pu répondre avant, désolé (enfin, pas si désolé que ça puisque maintenant j'ai une vraie crédence ! ^^). Je vais étudier les solutions, mais je pense m'orienter vers une commande permettant de faire un zip du code source avant compilation, puis ajouter le-dit zip avec un simple FileInstall. Par contre, je vais te piquer ton idée, Tlem; conditionner l'exécution du FileInstall avec la commande "/source", c'est une excellente façon de faire. Je vais ajouter ça à tous mes futurs scripts du projet en question.
Et je partage tes dires sur la compression : vu qu'XP est désormais sur la pente fatale, autant privilégier les compressions/décompressions directement prises en charge par Vista, Seven et 8. Ça évite de fournir une dll comme 7zip.dll, qui pour un néophyte paraîtra comme une boite noire (et donc hors de la transparence du code source que je cherche à privilégier).
Merci encore !
PS: Mon sujet n'est pas encore tout à fait [R]ésolu vu que je ne sais pas encore comment faire la commande en question (je vais fouiller), mais dès que j'aurais un code exemple propre à fournir dans mon premier message, je n'oublierai pas de modifier le titre.
NB: Il y a donc quand même bel et bien (au pire) un bug ou (au mieux) une erreur de conception dans le "#AutoIt3Wrapper_Res_SaveSource=Y" ? Genre un flag N / Y / A (pour "all")
Re: [..] "#AutoIt3Wrapper_Res_SaveSource=Y" et sources multi
Posté : mar. 27 mai 2014 01:22
par ZDS
Désolé de déterrer un sujet pas-si-vieux-que-ça-mais-quand-même, mais j'ai trouvé ma solution, basée sur vos différentes propositions :
- Installer 7Zip, et ajouter le chemin du logiciel dans la variable d'environnement "Path" pour éviter les commandes à rallonge
- Respecter une structure de code comme expliqué au dessus (si le point d'entrée d'un script est "C:\DossierScripts\MonProg.au3", alors le reste des sources est dans "C:\DossierScripts\MonProg\*")
- Utiliser la version "avancée" de SciTE, SciTE4AutoIt3, afin d'avoir tous les outils pour traiter les commandes d'entête du Wrapper
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_Before="7z.exe a -tzip "%scriptdir%\Sources.zip" "%scriptdir%\MonProg.au3""
#AutoIt3Wrapper_Run_Before="7z.exe a -tzip "%scriptdir%\Sources.zip" "%scriptdir%\MonProg""
#AutoIt3Wrapper_Run_After="del "%scriptdir%\Sources.zip""
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
- Utiliser dans le départ du logiciel une conditionnelle pour savoir si on demande l'extraction des sources ou pas
► Afficher le texte
Code : Tout sélectionner
[...]
Exit onLaunch()
Func onLaunch()
If onSources() Then
Local $WorkingDir = @WorkingDir
FileChangeDir(@ScriptDir)
FileInstall(".\Sources.zip", ".\MonProg-Sources.zip", 1)
FileChangeDir($WorkingDir)
Else
onStart()
OnAutoItExitRegister("onExit")
If singleton() Then
; Appel au véritable corps du code à exécuter
EndIf
EndIf
Return 0
EndFunc
Func onSources()
For $i = 1 To $CmdLine[0]
If StringRegExp($CmdLine[$i], "^(?i)(-|/)(src|source|sources)$") Then Return True
Next
Return False
EndFunc
[...]
Ainsi pour extraire les sources du programme compilé avec le Wrapper, on faire "C:\DossierScripts\MonProg.exe /src", et obtenir un fichier "C:\DossierScripts\MonProg-Sources.zip" contenant toutes les sources.
Problème [R]ésolu, merci encore !