Page 1 sur 1

[R] Réduire la taille des executables

Posté : lun. 24 sept. 2007 18:46
par BaronMouDuKu
Hello all !

Technicien réseau dans un lycée de plus de 500 PCs, AutoIt est devenu pour moi mon meilleur ami :
pas de runtime, compatibilité 98 XP 2000,simple et exXxtrement puissant !!
Je scripte a tout va avec !

Seulement voila, plus le temps passe et plus, a chaque version d'AutoIt, les tailles d'executables augmente. Meme si 250 Ko peuvent paraitrent "legers", il faut voir quand 300 momes se connectent en même temps sur un reseau 100 Mbs. Et qu'il chargent des scripts avec 2 a 4 executables chaqu'un.
Bref très vite ca fait 500 Mo a faire passer dans les tuyaux a chaque sonnerie de debut de cours, et tout le monde rale si un script met plus de 5 sec a charger.

Donc ma question est simple, comment compiler des executables plus petits (un programme avec UNE ligne de code fait deja 240 Ko a la base) ?

Merci d'avance de vos suggestions !

Posté : lun. 24 sept. 2007 19:53
par sylvanie
Bonjour,
la seule façon est de définir un taux de compression optimum et utiliser UPX dérrière lors de la compilation avec option.

sinon, il faut installer autoit sur tous les clents et travailler avec les compil .a3x, plus petites que la taille dus cript et semi compilées

Posté : mar. 25 sept. 2007 13:35
par BaronMouDuKu
j'ai deja regle tous les parametres possibles pour compresser au mieux mes executables
Et s'il est vrai que la taille des fichiers .a3x est imbattable (environ 10 Ko pour un script pas trop complexe), le code est en clair, et donc de petits bidouilleurs reussiraient a mettre le nez dedans, ce qui ne m'enchante guere. De plus, installer autoit sur tous les postes (plus de 500...) bof, enfin y'a toujours moyen de faire un script autoit pour ca :wink: !

Par contre j'ai ressorti de sous les fagots la version 3.0.1.2, et en recompilant 1 ou 2 script pour voir, je passe de 248Ko a 108Ko :shock: , sans message d'erreur.
J'imagine qu'il y a moins de biblio embarquees dans l'executable, mais est-ce que je prend un risque quelconque si je n'ai pas d'erreur a la compilation ?

y'a a-t-il des version d'autoit3 qu'il vaut mieux eviter (version avec un mechant bug par exemple) ?

Posté : mar. 25 sept. 2007 19:12
par BaronMouDuKu
Bon autant pour moi,
deja c'etait pas terrible de defendre l'idee d'utiliser un viel autoit (2004 quand meme), mais j'avais vraiment fait l'essai sur des scripts tres tres legers. :oops:
Y'a meme pas le support des variables booleenne dans la 3.0.1.2 (False/True) :lol:

j'ai épluche l'historique, et plein de fonctions que j'utilise n'apparaissent que recemment donc...

Je pense donc le sujet clos (sauf si quelqu'un me sort une aut' soluce)
Mais je garde l'idee de faire quelques scripts simplistes en version 3.0 pour les transferts reseau. Les scripts plus complexes (3.2.8.x) seront localement sur les postes.
A moi d'eclater mes programmes en plein de scripts !

Merci !

Posté : mar. 25 sept. 2007 22:30
par sylvanie
Je ne sais pas réellement ce que fait autoit lorsqu'il compile en a3x, cependant depuis la 3.2.5.1, Exe2Au3 n'est plus censé pouvoir faire chemin arrière.

Comment arrives tu à revenir sur le code en clair depuis un a3x ?
C'est intéressant

Sinon je reviens sur ce que j'ai dit dans le dernier post : avec les a3x, seule la présence de l'executable AutoIt3.exe est nécessaire, pas son installation totale

Posté : mar. 25 sept. 2007 22:55
par Voodoo
Les includes !

Certaines sont remplies de code inutiles !! quelquefois + de 1500 lignes alors que tu en as besoin que de 10 !

Sa pourrait te faire gagner quelque chose...

Pour "vider" les passage inutiles des includes voila comment je procéderais.
  • Une fois ton code écris il faut compiler en autorisant la decompilation.
  • Puis tu decompiles ton programme et la miracle il y a beaucoup plus de ligne que prévu ! toutes les includes sont presentes ! efface tous ce dont tu n'as pas besoin ! ( attention a vérifier que le script fonctionne toujours au cas ou tu effacerais une fonction importante.)
  • Apres ce nettoyage terminé, efface les #include de ton programmme puisque elle sont deja ecrite !
  • Recompile...

Posté : mar. 25 sept. 2007 22:57
par sylvanie
bien vu !

Posté : mer. 26 sept. 2007 11:00
par BaronMouDuKu
erreur de manip : je n'ai pas réussi a repasser en clair le code d'un .a3x, j'avais juste renommer un .au3 en .a3x.
Il n'est pas possible de revenir en arrière depuis la 3.2.5.1.

Donc pour tester la technique de décompilation de VooDoo, je vais m'installer la 3.2.4.9 (dernière version téléchargeable dans les archives) et tenter le coup des includes...

Je vous tiens au courant !

Posté : ven. 28 sept. 2007 13:38
par BaronMouDuKu
Et bien non,

En effet, on y gagne un peu mais... 10 Ko sur les 240 Ko de l'exécutable. L'idée était belle pourtant !
De toute façon ça voulait dire rester bloqué sur la version 3.2.4.9... ou alors faire ses includes manuellement en allant chercher le nécessaire dans les "constant.au3" et compagnie, vu qu'on ne peux plus décompiler maintenant...

Merci de toutes ces bonnes idées, j'en reste donc a un script simpliste d'installation et de mise a jour à travers le réseau en version 3.0.1 (90 Ko) et a des scripts locaux mais complexes en version 3.2.8 (240 Ko minimum)

Thanks !

Posté : ven. 28 sept. 2007 17:42
par Voodoo
N'oubliez pas de mettre les balises merci

Posté : jeu. 01 nov. 2007 14:08
par jl56
bonjour

je ne connaissais les fichiers a3x que mentionne Sylvanie
j'ai donc compilé un script au3 de 125 ko en a3x
résultat 60 k au lieu de 285 k l'exe
puis j'ai copier sur un poste où il n'y a pas autoit le programme AutoIt3.exe
en lancant le fichier autoit3.exe
via par exemple "c:\test\autoit3.exe" script.a3x
le script ce lance sans probleme
j'ai meme associer l'extension a3x au programme c:\test\autoit3.exe
et en cliquant sur le fichier script.a3x ca fonctionne normalement

tu peut donc copier une seul fois le fichier autoit3.exe et transferer ton script a3x seulement à chaque connexion

voila

a+ jl56

Posté : jeu. 01 nov. 2007 14:24
par ani
et pour faire top tu compresse le tout (attribut compressed (2048))
exemple 300 passe à 200 compression 1,5 pour 1


garanti :)