Bonjour les admins,

 

Bien que le titre soit un peu simpliste, je trouve que c'est un vrai tour de magie qui plaira sûrement à ceux qui ne le connaissent pas. Pour ma part, il me sauve souvent la vie chez les clients.

Pour ceux qui travaillent avec des clients logiciels multiversions -du genre : client Oracle, au hasard- il est fréquent qu'on doive faire fonctionner un logiciel avec la version la plus récente. Du coup, les logiciels les plus anciens plantent lamentablement car ils ne sont pas compatibles.

Bon, je suis encore un peu obscur, alors je vais faire un dessin (excusez, je vais faire ça en mode texte) :

------------------------

 logiciel que j'installe <-[fonctionne avec]-> client Oracle 11 ou client Oracle 12

logiciel qui doit fonctionner à tout prix pour le client <-[fonctionne avec]-> client Oracle 8

------------------------

En gros, je vais juste vous expliquer comment faire en sorte que votre logiciel fonctionne avec Oracle12 et que le logiciel du client fonctionne avec Oracle 8, comme si Oracle12 n'existait pas.

L'astuce est la suivante. Un client Oracle (comme tout logiciel) utilise :

  • des clés de registre
  • des chaines dans la variable PATH
  • des fichiers et des dossiers (pour les DLL notamment)

Le fonctionnement normal avec un client Oracle 12 -par exemple- est :

  • clés de registre : HKEY_LOCAL_MACHINE\Software\Oracle\Mon_client_oracle_12
  • variable PATH : tout_un_tas_de_m*rdier;C:\mon_client_oracle12;C:\mon_client_oracle12\BIN
  • répertoire : C:\mon_client_oracle12\ (et tous ses sous-dossiers)

Pour faire fonctionner un client Oracle 8 on aura :

  • clés de registre : HKEY_LOCAL_MACHINE\Software\Oracle\Le_client_Oracle_8
  • variable PATH : tout_un_tas_de_m*rdier;C:\le_client_oracle8;C:\le_client_oracle8\BIN
  • répertoire : C:\le_client_oracle8\ (et tous ses sous-dossiers)

J'espère ne pas vous avoir perdu car c'est là que le tour de magie va apparaître.

En effet, dans l'absolu ce serait super simple à faire cohabiter :

  • clés de registre : HKEY_LOCAL_MACHINE\Software\Oracle\Mon_client_oracle12 + HKEY_LOCAL_MACHINE\Software\Oracle\Le_client_oracle8 (les deux peuvent cohabiter sans problème puisque la clé de registre qui est utilisées est définie par le fichier oracle.key du répertoire du client oracle)
  • répertoires : C:\mon_client_oracle12\ +C:\le_client_oracle8\ (les deux peuvent cohabiter sans aucun problème tant qu'on va chercher l'exe dans le bon répertoire)
  • variable PATH : tout_un_tas_de_m*rdier;C:\mon_client_oracle12;C:\mon_client_oracle12\Bin;C:\le_client_oracle8;C:\le_client_oracle8\Bin (là ça ne fonctionne pas puisque lorsque je vais appeler l'exe du client oracle, il va aller la chercher avant tout dans le répertoire oracle12 ... ou dans le répertoire oracle8 si j'inverse dans la variable PATH. Et je ne veux pas de ça !!)

Le tour de magie est donc de modifier ma variable PATH à chaque fois que je vais exécuter le logiciel tout pourri du client (pas le mien qui nécessitera pas de bidouille pour fonctionner). On va donc exécuter une commande .BAT qui :

  1. définit des variables (pour l'exemple il modifiera la variable NLS_LANG=FRENCH_FRANCE.WE8ISO8859P15)
  2. fait du ménage dans la variable PATH (pour l'exemple, va enlever C:\mon_client_oracle12;C:\mon_client_oracle_12\Bin)
  3. ajoute une chaine à la fin de la variable PATH (pour l'exemple, va ajouter C:\le_client_oracle8;C:\le_client_oracle8\Bin)
  4. exécute l'exécutable indispensable du client pour lequel vous vous êtes donnés de la peine (dans l'exemple : C:\application_old\programme.exe)

Regardez bien, car ça va aller vite :

Créer un fichier TourDeMagie.Bat contenant la ligne suivante :

CMD /C "set NLS_LANG=FRENCH_FRANCE.WE8ISO8859P15&&SET PATH=%PATH: C:\mon_client_oracle12;C:\mon_client_oracle_12\Bin=C:\le_client_ oracle8;C:\le_client_oracle8\Bin;%&&start C:\application_old\pro gramme.exe"

Tadaaa !!! Vous pouver maintenant faire un raccourci et le mettre sur le bureau.

 

Edit : en y repensant, je me dis que ce genre d'article est toujours celui qu'on galère à trouver sur internet