2004-01-12

Deux types d'exécutables sous Windows

Je suis en train de préparer une nouvelle version de PngOptimizer, et j'y ajoute notamment la possibilité de pouvoir l'utiliser en ligne de commande. Par conséquent, ce logiciel aurait deux modes : un mode graphique, ou un mode en ligne de commande.

Et là je me confronte à une grosse difficulté : Windows, contrairement à d'autres systèmes d'exploitation, fait la différence entre ces modes de fonctionnement. Soit un programme est de type ligne de commande, soit il est de type graphique. Il s'agit d'un flag dans l'en-tête du fichier exécutable qui donne cette information à Windows. Voici les principales différences :

Exécutable de type « ligne de commande » :

  • Une fenêtre de ligne de commande (qu'on appelle aussi fenêtre console) est créée automatiquement si le programme en question n'est pas lancé depuis une fenêtre console déjà existante.
  • Le programme est blocant ; quand on le lance depuis une fenêtre console, cette dernière ne rend pas la main tant que le programme lancé n'a pas terminé son exécution. C'est pratique quand on écrit des scripts, on sait que chaque commande sera exécutée l'une après l'autre.

Pour les exécutable de type « graphique », c'est l'inverse :

  • Pas de fenêtre console créée automatiquement au démarrage.
  • Le programme n'est pas blocant quand il est lancé depuis une fenêtre console existante. Cette dernière rend la main immédiatement.

Ce que j'aimerais, c'est avoir un programme blocant mais qui n'ouvre pas de fenêtre console automatiquement. En raison de cette bizarrerie de conception de Windows, je ne peux pas faire en sorte que PngOptimizer ait ce comportement hybride. Je tiens à présenter mes excuses à l'utilisateur qui m'a demandé cette amélioration, cela est en train de prendre plus de temps que prévu.

J'ai tenté de contourner le problème de différentes façons, sans résultat acceptable. Je vais peut-être devoir fournir deux versions séparées, une pour la ligne de commande, une avec une interface graphique. Ce système d'exploitation me rend si las parfois...