Page 1 sur 1

[R] Chemin de lancement d'un exécutable.

Posté : sam. 17 janv. 2015 16:33
par mimione
[Résolu, mais pas expliqué..]

Bonjour.

Dans plusieurs de mes programmes, j'utilisais la commande suivante pour lancer un programme externe situé dans un autre répertoire, mais au même niveau que le script qui le lance:
Run (@Scriptdir & "\..\RepertoireDuProgrammeA_Lancer\Programme.exe")

la présence du @Scriptdir protège d'un éventuel changement de "Working Directory" par un "FileOpenDialog", par exemple, toujours piégeux.

Cette commande était équivalente à :
Run (D:\UnRepertoire\RepertoireDuScript\..\RepertoireDuProgrammeA_Lancer\Programme.exe)

Et, bien qu'un peu "curieuse" (encore que...), fonctionnait correctement, jusqu'au jour ou (ce matin), justement... ça ne fonctionne plus (et ceci sur plusieurs de mes programmes, dont certains que je n'ai pas touché, mais utilisé sans soucis ces jours-ci).

Le remplacement par:
FileChangeDir(@ScriptDir) ;-- Fixe la "Working Directory" à "@scriptdir"
Run ("..\RepertoireDuProgrammeA_Lancer\Programme.exe")


Remet les choses en ordre.
Avez-vous rencontré ce problème, et si oui, à votre avis, quelle en est la cause ...?
Certes, j'ai rétabli la situation, mais j'aimerais bien expliquer la chose.

Merci pour votre analyse et vos avis.
M.C.

Edit: pour illustrer le problème, des scripts de test.
Test 1: le "Process 2" n'est pas exécuté,
Test 2: le "Process 2" est correctement exécuté.
Je confirme que j'ai, depuis fort longtemps, toujours codé comme dans le "Test 1", et jusqu'à ce matin, ça fonctionnait nickel.
Mon PC aurait-il coulé une bielle ?

Re: [..] Chemin de lancement d'un exécutable.

Posté : sam. 17 janv. 2015 21:03
par jguinch
Les 2 tests fonctionnent chez moi...
AutoIt v3.3.12.0 et v3.3.13.19 (Beta)

Re: [..] Chemin de lancement d'un exécutable.

Posté : sam. 17 janv. 2015 21:54
par orax
Ce code retourne quoi dans la console ?

Code : Tout sélectionner

#include <WinAPI.au3>
$pid = Run(@ScriptDir & "\..\Process2\Process 2.exe")
ConsoleWrite($pid & @CRLF & @error & @CRLF & @extended & @CRLF & _WinAPI_GetLastErrorMessage() & @CRLF & _WinAPI_GetLastError() & @CRLF)

Re: [..] Chemin de lancement d'un exécutable.

Posté : dim. 18 janv. 2015 10:01
par mimione
Orax

Votre code retourne:

0
1
193

87


(et pas d'exécution du script "Process 2")

La commande qui fonctionne (sans "@Scriptdir) donne:

6184
0
0
Il n’y a plus de fichier.

18


Suite à l'essai positif de jguinch, je viens de tester sur un PC portable, et les deux écritures fonctionnent, ce qui n'est pas fait pour me rassurer sur l'état de santé de mon PC principal...
A tout hasard, j'ai fait les manips suivantes:
> Ré-installation de AutoIt: Pas de changement...
> Restauration système à J-4 (ou tout fonctionnait): Pas de changement...

AUTRE TEST: ShellExecute(@Scriptdir & "\..\Process2\Process 2.exe") fonctionne correctement.

L'eau bénite, peut-être ?
M.C.

Re: [..] Chemin de lancement d'un exécutable.

Posté : dim. 18 janv. 2015 17:00
par orax
Sur mon PC j'ai...

Code : Tout sélectionner

0
1
193

87
... si le fichier "Process 2.exe" n'est pas exécutable. Par exemple en créant un "nouveau fichier texte.txt" et en le renommant en "Process 2.exe".
D'après MSDN Win32 Error Codes le code d'erreur 193 (0xC1) correspond à ERROR_BAD_EXE_FORMAT — %1 is not a valid Win32 application.
Ce qui est parfaitement logique dans mon cas puisque j'essayais d'exécuter un fichier .txt (vide) renommé en .exe.

Il faudrait voir aussi dans les journaux Windows (dans l'observateur d'événements), s'il y a une erreur qui serait enregistrée, juste après la tentative d'exécution de "Process 2.exe" (avec le test 1).
Je ferais aussi le test avec l'antivirus désactivé. Et éventuellement recompiler "Process 2.exe" si ce n'est pas déjà fait.

Re: [..] Chemin de lancement d'un exécutable.

Posté : lun. 19 janv. 2015 08:10
par mimione
Merci pour toutes ces suggestions.
Rien dans les journaux Windows qui concernerait ce problème, anti-virus hors de cause...
Je ne comprends vraiment pas pourquoi:

- Le problème est arrivé subitement,
- Run (@Scriptdir & "\..\Process2\Process 2.exe") ne fonctionne plus,
- ShellExecute(@Scriptdir & "\..\Process2\Process 2.exe") fonctionne toujours correctement.

Malheureusement, la plongée dans les entrailles de Windows touche vite à mes limites de compétence.
Tant pis si on n'arrive pas à "mettre le doigt" sur l'explication...
--------------------------------------
SAPERLIPOPETTE !!!! Après quelques manips de dernière chance:

> Run (@Scriptdir & "\..\Process2\Process 2.exe" & @CRLF) : NON (déjà vu)
> Run ("D:\Z DEVELOPPEMENT\MES PROJETS\00 TESTS ET RECHERCHES\TEST LANCEMENT\Process2\Process 2.exe"): NON
> Copie de "Process 2.exe" dans "D:"
> Run ("D:\Process 2.exe"): OUI !!!

et après ça:
> Run (@Scriptdir & "\..\Process2\Process 2.exe" & @CRLF) : OUI ...!!!...???

Et le problème a totalement disparu, y compris dans mes programmes anciens....

Explication bien difficile maintenant.
Problème résolu, mais de manière bien peu satisfaisante...
Merci pour vos tentatives, et bonne journée.

M.C.