OVH Cloud OVH Cloud

Trouver le chemin d'un exécutable...

17 réponses
Avatar
Clément
Bonjour,

Quand je fais Démarrer->Executer -> iexplore.exe, IE se lance. Normal vous
me direz...

Pour obtenir le même comportement par programmation, on peut utiliser
ShellExecute.
Mais moi, je voudrais utiliser CreateProcess. Mais il est écrit dans la MSDN
"The function will not use the search path", et en effet, il ne trouve pas
iexplore.exe...

Comment trouver le Path de iexplore.exe, sans être obligé le chercher dans
tous les répertoires... Peut-on récupérer les "search paths" ?

S'il vous plait, ne me renvoyez pas vers Google News (sauf un lien précis,
bien sûr), car j'ai cherché en vain (j'ai bien trouvé FindExecutableImage,
etc... mais je ne crois pas que ce soit fait pour ca, ou alors j'ai rien
compris !)...

Merci d'avance, en espérant que ce n'est pas une "FAQ" (je ne sais peut-être
pas chercher ;o)

Cordialement,
Spoofix.

10 réponses

1 2
Avatar
Raymond Mercier
Salut,

Peut être en récupérant la variable d'environnement PATH et en la parsant.

Tous les répertoire sont séparés par le caractère ';'

Raymond

"Clément" a écrit dans le message de news:
42c3ba25$0$32356$
Bonjour,

Quand je fais Démarrer->Executer -> iexplore.exe, IE se lance. Normal vous
me direz...

Pour obtenir le même comportement par programmation, on peut utiliser
ShellExecute.
Mais moi, je voudrais utiliser CreateProcess. Mais il est écrit dans la
MSDN "The function will not use the search path", et en effet, il ne
trouve pas iexplore.exe...

Comment trouver le Path de iexplore.exe, sans être obligé le chercher dans
tous les répertoires... Peut-on récupérer les "search paths" ?

S'il vous plait, ne me renvoyez pas vers Google News (sauf un lien précis,
bien sûr), car j'ai cherché en vain (j'ai bien trouvé FindExecutableImage,
etc... mais je ne crois pas que ce soit fait pour ca, ou alors j'ai rien
compris !)...

Merci d'avance, en espérant que ce n'est pas une "FAQ" (je ne sais
peut-être pas chercher ;o)

Cordialement,
Spoofix.



Avatar
Fred
Clément a écrit :
Bonjour,

Quand je fais Démarrer->Executer -> iexplore.exe, IE se lance. Normal vous
me direz...

Pour obtenir le même comportement par programmation, on peut utiliser
ShellExecute.
Mais moi, je voudrais utiliser CreateProcess. Mais il est écrit dans la MSDN
"The function will not use the search path", et en effet, il ne trouve pas
iexplore.exe...

Comment trouver le Path de iexplore.exe, sans être obligé le chercher dans
tous les répertoires... Peut-on récupérer les "search paths" ?




En n'utilisant que le paramètre "lpCommandLine".

Voir le MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp

Fred
Avatar
Clément
"Raymond Mercier" a écrit dans le message de
news: da0eeg$172$
Salut,

Peut être en récupérant la variable d'environnement PATH et en la parsant.

Tous les répertoire sont séparés par le caractère ';'

Raymond



Merci pour la réponse, mais la variable PATH ne contient pas le chemin
d'iexplore.exe, qui est dans C:Program filesInternet explorer. Est-ce
qu'Internet Explorer est un cas à part ? Car j'ai d'autres programmes qui
sont dans un sous-répertoire de Program files et qui ne se lancent pas, si
je tape juste le nom de l'exe.

Clément.
Avatar
Clément
> En n'utilisant que le paramètre "lpCommandLine".

Voir le MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp



Merci, mais ca ne marche pas pour iexplore.exe : Erreur 2 -> "Le fichier
spécifié est introuvable."
Internet explorer est peut-etre un cas à part... ?

Clément.
Avatar
Clément
> Merci, mais ca ne marche pas pour iexplore.exe : Erreur 2 -> "Le fichier
spécifié est introuvable."
Internet explorer est peut-etre un cas à part... ?

Clément.


Mais si je copie iexlore.exe dans C:Windows, ca marche très bien !
Avatar
Fred
Clément a écrit :
En n'utilisant que le paramètre "lpCommandLine".

Voir le MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp




Merci, mais ca ne marche pas pour iexplore.exe : Erreur 2 -> "Le fichier
spécifié est introuvable."
Internet explorer est peut-etre un cas à part... ?



Pouvez-vous nous envoyer le code utilisé pour appeler votre CreateProcess ?
Ca me paraît étrange que ça ne marche pas en utilisant que lpCommandLine.

Fred
Avatar
Clément
"Fred" a écrit dans le message de news:
42c3c3ea$0$10726$
Clément a écrit :
En n'utilisant que le paramètre "lpCommandLine".

Voir le MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp




Merci, mais ca ne marche pas pour iexplore.exe : Erreur 2 -> "Le fichier
spécifié est introuvable."
Internet explorer est peut-etre un cas à part... ?



Pouvez-vous nous envoyer le code utilisé pour appeler votre CreateProcess
?
Ca me paraît étrange que ça ne marche pas en utilisant que lpCommandLine.

Fred




Sachant que "cmdLine" contient "iexplore.exe"...
Et comme ca marche si iexplore.exe est dans C:Windows, je pense que le code
est bon.

STARTUPINFO si = {sizeof(si)};

PROCESS_INFORMATION pi = {};

// Démarre le process fils

if( !CreateProcess(NULL,

cmdLine, // Command line.

NULL, // Process handle non héritable.

NULL, // Thread handle non héritable.

FALSE, // héritage des handles activée.

flags, // Flags

NULL, // Utilise le "parent's environment block"

CurrentDir, // Répertoire courrant

&si, // Pointeur vers la STARTUPINFO structure.

&pi ) // Pointeur vers la PROCESS_INFORMATION structure.

)

{

CTools::Output(TRUE, "CTools::ExecuteFile -> CreateProcess erreur %i",
GetLastError());

return -1;

}

// Ferme le handle du thread (on ne s'en sert pas)

CloseHandle( pi.hThread );

DWORD ret = 0;

if (bWaitForEnd)

{

// Attend la fin du Process

WaitForSingleObject(pi.hProcess, INFINITE);

// Récupère le code de sortie du programme

GetExitCodeProcess(pi.hProcess, &ret);

}

// Ferme le handle du process

CloseHandle( pi.hProcess );

return ret;
Avatar
Fred
Clément a écrit :
Bonjour,

Quand je fais Démarrer->Executer -> iexplore.exe, IE se lance. Normal vous
me direz...



Ben non, pas si normal que ça...
iexplorer est installé par défaut sous %Program Files%/IExplorer
...qui n'est pas dans le PATH si je ne m'abuse....

Fred
Avatar
Fred
Fred a écrit :
Clément a écrit :

Bonjour,

Quand je fais Démarrer->Executer -> iexplore.exe, IE se lance. Normal
vous me direz...




Ben non, pas si normal que ça...
iexplorer est installé par défaut sous %Program Files%/IExplorer
...qui n'est pas dans le PATH si je ne m'abuse....



mea culpa...
"%Program Files%/Internet Explorer" est pas IExplorer

Fred
Avatar
Remi Thomas
"Clément" écrivit
Bonjour,

Quand je fais Démarrer->Executer -> iexplore.exe, IE se lance. Normal vous
me direz...

Pour obtenir le même comportement par programmation, on peut utiliser
ShellExecute.
Mais moi, je voudrais utiliser CreateProcess. Mais il est écrit dans la
MSDN "The function will not use the search path", et en effet, il ne
trouve pas iexplore.exe...

Comment trouver le Path de iexplore.exe, sans être obligé le chercher dans
tous les répertoires... Peut-on récupérer les "search paths" ?

S'il vous plait, ne me renvoyez pas vers Google News (sauf un lien précis,
bien sûr), car j'ai cherché en vain (j'ai bien trouvé FindExecutableImage,
etc... mais je ne crois pas que ce soit fait pour ca, ou alors j'ai rien
compris !)...

Merci d'avance, en espérant que ce n'est pas une "FAQ" (je ne sais
peut-être pas chercher ;o)

Cordialement,
Spoofix.




Salut,

Je viens de regarder comment fonctionne ShellExecute et il n'y a pas de
mystère : il faut que tu regardes si l'exe existe pour chaque valeur du
Path.
Donc tu récupéres la valeur de PATH puis tu testes chaque chemin pour voir
si l'exe existe.

Rémi

--
Rémi Thomas - MVP Visual C++
Développeur Windows indépendant
http://www.xtware.com/cv
1 2