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

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#1

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message par Tlem »

J'ai rajouté la partie sur les arguments en fin de message.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#3

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#5

Message 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 ;)
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#6

Message 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.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 15:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Status : Hors ligne

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

#7

Message par DJSIR »

Oohoo.. à intégrer dans le pack AutoIt FR et dans le template de nouveau script Tlem :D
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#8

Message par Tlem »

Mouais, effectivement cela peut servir occasionnellement. Je vais voir.

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

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre