Page 1 sur 1

[Tuto] AutoIt et la taille du script compilé.

Posté : lun. 31 août 2009 22:31
par Tlem
Vous avez été plusieurs à poser des questions sur la taille d'un script AutoIt3 compilé.

- Comment ce fait-il qu'un script compilé en 32Bit avec une seule ligne de code peut faire 598Ko (ou 283 Ko si j'utilise la compression UPX) ?
- Comment peut-on en réduire la taille ?

L'explication est relativement simple.
Un script AutoIt3 compilé ce compose de deux partie distincte.
La première partie correspond à la partie binaire de l'interpréteur AutoIt3.exe (AutoItSC.bin pour du 32Bit et AutoItSC_x64.bin pour du 64Bit).
La seconde partie correspond au script compilé en a3x.

Ce qui nous donne :
Image

Il existe trois solutions pour réduire la taille d'un script AutoIt3 compilé :
  • - La première solution consiste à utiliser l'option UPX.
    Par défaut le compilateur Aut2exe.exe utilise cette compression, tout comme Scite4AutoIt, si la directive #AutoIt3Wrapper_UseUpx=n n'a pas été stipulée.
    Par contre, gardez à l'esprit que le fait d'utiliser la compression UPX rend votre script compilé suspect pour la plupart des logiciel antivirus car UPX est une compression très largement utilisée par la plupart des logiciels malveillants.

    - La deuxième solution consiste à utiliser un autre compresseur, mais le gain octroyé par ce type de manipulation n'est pas significatif et donc n'est pas une solution intéressante.

    - La troisième solution consiste à compiler votre script en a3x et à utiliser AutoIt3.exe pour exécuter votre/vos scripts.
    Le format a3x correspond au code compilé tel quel et sans fioritures, par conséquent la taille s'en trouve extrêmement réduite.
    Par contre comme je l'ai stipulé précédemment, il ne peut être exécuté seul sur une machine ou AutoIt3 ne serait pas installé. Il lui faut impérativement l'interpréteur associé, qui en l'occurrence est AutoIt3.exe.
    Vous pouvez lancer un script a3x de différentes manières :
    • - Le simple glissé/poser du fichier a3x sur le programme AutoIt3.exe

      - L'utilisation de la ligne de commande : "AutoIt3.exe" "C:\Prog\MonSript.a3x"

      - L'association de fichier (placez AutoIt3.exe sur la machine de destination dans Windows par exemple puis en faisant un double clic sur le fichier .a3x, créez l'association de l'exécution).
Voici un tableau récapitulatif de la taille d'un script compilé (32bit) selon les différents procédés. Le script en question est la simple ligne :

Code : Tout sélectionner

MsgBox(0, '', 'Hello World')
  • Script compilé en Exe sans compression UPX = 613 236 octets
  • Script compilé en Exe avec compression UPX = 290 576 octets
  • Script compilé en A3x sans compression UPX = 429 octets
  • Script compilé en A3x avec compression UPX = 383 octets
Multiplions cette ligne 500 fois :
  • Script compilé en Exe sans compression UPX = 613 445 octets
  • Script compilé en Exe avec compression UPX = 290 793 octets
  • Script compilé en A3x sans compression UPX = 639 octets
  • Script compilé en A3x avec compression UPX = 591 octets
Multiplions cette ligne 5000 fois :
  • Script compilé en Exe sans compression UPX = 615 327 octets
  • Script compilé en Exe avec compression UPX = 292 675 octets
  • Script compilé en A3x sans compression UPX = 2 521 octets
  • Script compilé en A3x avec compression UPX = 2 473 octets
On constate donc que la compression de l'exe permet de gagner énormément de place (environs 320Ko) contrairement à la compression du fichier a3x (environs 50 octets).
Par contre, on peut constater qu'un script de 5000 lignes peut être 116 fois moins gros en a3x non compressé que le script compilé en Exe avec compression UPX.

Cela-dit, le format A3X comme le format AU3 n'accepte ni l'un ni l'autre la gestion de paramètres en arguments de la ligne de commande.
Donc si vous devez utiliser un script qui utilise ceci, alors le format compilé en EXE est la seule solution.


Maintenant que vous avez les éléments en main, à vous de choisir votre format.

Salutations.
Thierry

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : mar. 01 sept. 2009 23:24
par Tlem
J'ai rajouté la partie sur les arguments en fin de message.

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : mer. 02 sept. 2009 08:12
par timmalos
Quand je fais un

c:\qdssimulation\Simulati_On.au3 /silent

Dans CMD ca marche très bien,

quand je lance un ShellExecute("autoit3.exe","c:\qdssimulation\Simulati_On.au3 /silent") ca marche aussi

ShellExecute("c:\qdssimulation\Simulati_On.au3", "/silent","open") marche egalement

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : mer. 02 sept. 2009 08:20
par Tlem
Quelle version de AutoIt3 ?

Hummm, effectivement.
Je crois franchement qu'il faut que je dorme de temps en temps. :oops:

J'avais essayé d'utiliser le format A3X pour AutoItSecure (pour réduire la taille) mais ça n'avais pas fonctionné !!!
Je regarderais ça de plus près tout à l'heure.

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : mer. 02 sept. 2009 11:21
par timmalos
Pas de soucis mais je comprenais pas ;)


J'utilise souvent une appliation .exe, qui si elle doit utiliser d'autres programmes les ouvres en .au3 (avec Autoit3.exe)
Comme j'utilise assez souvent dans mes programmes le .au3 tel quel que j'ouvre avec Autoit3.exe inclut dans le dossier, ceci afin de modifier rapidement le programme, c'est assez répendu que j'utilise des parametres dans mes .au3, voilà pourquoi ca a fait TILT dans ma tête ;)

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : dim. 11 avr. 2010 09:01
par SagePourpre
Un autre moyen d'alléger la taille du fichier final est d'utiliser un pré-processeur.

http://www.autoitscript.com/forum/index ... t&p=789341

Ce programme va enlever tous les #include au début de votre script et mettre à la fin de celui-ci les
fonctions utilisées.

L'utilité est que, si vous utilisez seulement 2-3 fonctions d'un #include, seules les fonctions utilisées seront
compilées.

De plus, les lignes vides et les commentaires sont retirés pour réduire encore plus la taille du fichier final.

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : dim. 11 avr. 2010 10:13
par DJSIR
Oohoo.. à intégrer dans le pack AutoIt FR et dans le template de nouveau script Tlem :D

Re: [Tuto] AutoIt et la taille du script compilé.

Posté : dim. 11 avr. 2010 10:35
par Tlem
Mouais, effectivement cela peut servir occasionnellement. Je vais voir.

Mais qu'entendez-vous par : "intégrer dans le template de nouveau script" ?