Je fais un outil en C, et j'ai besoin dans celui-ci, de lancer un script
python (c'est un panneau d'administration avec pyGTK). J'essaye
d'utiliser system() et ShellExecute() en spéciant la ligne de commande:
"c:/XXX/python.exe pannel.py", mais j'ai l'impression qu'il ne me prend
pas en compte mon argument indiquant le script à lancer.
Il faut s'y prendre en lisant la doc de ShellExecute(). Les paramètres de commande sont à passer en 4e paramètre.
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
Bertrand Lenoir-Welter
Sty :
Comment faut-il s'y prendre svp ?
Moi je m'y prendrais plutôt avec CreateProcess() qui me semble plus simple pour lancer un exécutable dont on connaît le chemin d'accès. Quelque chose comme : CreateProcess( 0, "c:/XXX/python.exe pannel.py", 0, 0, FALSE, 0, 0, "c:/XXX/python.exe", &StartInfo, &ProcInfo );
Voir les structures PROCESS_INFORMATION et STARTUP_INFORMATION et les possibles contrôles associés genre WaitForSingleObject(). Pas oublier ensuite le CloseHandle(ProcInfo.hThread). Et aussi pas oublier non plus de mettre la commande et les argument chacun entre double-quotes s'il y a des espaces dans les noms de répertoire ou de fichiers.
Je dis pas que c'est mieux, mais c'est comme ça que je fais pour lancer un exe avec ou sans arguments, avec ou sans attente de fin de thread, et ça m'a jamais posé le moindre problème.
Sty :
Comment faut-il s'y prendre svp ?
Moi je m'y prendrais plutôt avec CreateProcess() qui me semble plus
simple pour lancer un exécutable dont on connaît le chemin d'accès.
Quelque chose comme :
CreateProcess(
0,
"c:/XXX/python.exe pannel.py",
0,
0,
FALSE,
0,
0,
"c:/XXX/python.exe",
&StartInfo,
&ProcInfo
);
Voir les structures PROCESS_INFORMATION et STARTUP_INFORMATION et les
possibles contrôles associés genre WaitForSingleObject(). Pas oublier
ensuite le CloseHandle(ProcInfo.hThread). Et aussi pas oublier non plus
de mettre la commande et les argument chacun entre double-quotes s'il y
a des espaces dans les noms de répertoire ou de fichiers.
Je dis pas que c'est mieux, mais c'est comme ça que je fais pour lancer
un exe avec ou sans arguments, avec ou sans attente de fin de thread, et
ça m'a jamais posé le moindre problème.
Moi je m'y prendrais plutôt avec CreateProcess() qui me semble plus simple pour lancer un exécutable dont on connaît le chemin d'accès. Quelque chose comme : CreateProcess( 0, "c:/XXX/python.exe pannel.py", 0, 0, FALSE, 0, 0, "c:/XXX/python.exe", &StartInfo, &ProcInfo );
Voir les structures PROCESS_INFORMATION et STARTUP_INFORMATION et les possibles contrôles associés genre WaitForSingleObject(). Pas oublier ensuite le CloseHandle(ProcInfo.hThread). Et aussi pas oublier non plus de mettre la commande et les argument chacun entre double-quotes s'il y a des espaces dans les noms de répertoire ou de fichiers.
Je dis pas que c'est mieux, mais c'est comme ça que je fais pour lancer un exe avec ou sans arguments, avec ou sans attente de fin de thread, et ça m'a jamais posé le moindre problème.
lkm
Bertrand Lenoir-Welter wrote:
Sty :
Comment faut-il s'y prendre svp ?
Moi je m'y prendrais plutôt avec CreateProcess() qui me semble plus simple pour lancer un exécutable dont on connaît le chemin d'accès. Quelque chose comme : CreateProcess( 0, "c:/XXX/python.exe pannel.py", 0, 0, FALSE, 0, 0, "c:/XXX/python.exe", &StartInfo, &ProcInfo );
Voir les structures PROCESS_INFORMATION et STARTUP_INFORMATION et les possibles contrôles associés genre WaitForSingleObject(). Pas oublier ensuite le CloseHandle(ProcInfo.hThread). Et aussi pas oublier non plus de mettre la commande et les argument chacun entre double-quotes s'il y a des espaces dans les noms de répertoire ou de fichiers.
Je dis pas que c'est mieux, mais c'est comme ça que je fais pour lancer un exe avec ou sans arguments, avec ou sans attente de fin de thread, et ça m'a jamais posé le moindre problème.
Merci à toi et à AMcD, j'ai lus la doc de ShellExecute et je ne pense pas que cette fonction puisse me permettre de faire ce que je veux. CreateProcess à l'air de mieu convenir à mon problème.
Merci encore :)
Bertrand Lenoir-Welter wrote:
Sty :
Comment faut-il s'y prendre svp ?
Moi je m'y prendrais plutôt avec CreateProcess() qui me semble plus
simple pour lancer un exécutable dont on connaît le chemin d'accès.
Quelque chose comme :
CreateProcess(
0,
"c:/XXX/python.exe pannel.py",
0,
0,
FALSE,
0,
0,
"c:/XXX/python.exe",
&StartInfo,
&ProcInfo
);
Voir les structures PROCESS_INFORMATION et STARTUP_INFORMATION et les
possibles contrôles associés genre WaitForSingleObject(). Pas oublier
ensuite le CloseHandle(ProcInfo.hThread). Et aussi pas oublier non plus
de mettre la commande et les argument chacun entre double-quotes s'il y
a des espaces dans les noms de répertoire ou de fichiers.
Je dis pas que c'est mieux, mais c'est comme ça que je fais pour lancer
un exe avec ou sans arguments, avec ou sans attente de fin de thread, et
ça m'a jamais posé le moindre problème.
Merci à toi et à AMcD, j'ai lus la doc de ShellExecute et je ne pense
pas que cette fonction puisse me permettre de faire ce que je veux.
CreateProcess à l'air de mieu convenir à mon problème.
Moi je m'y prendrais plutôt avec CreateProcess() qui me semble plus simple pour lancer un exécutable dont on connaît le chemin d'accès. Quelque chose comme : CreateProcess( 0, "c:/XXX/python.exe pannel.py", 0, 0, FALSE, 0, 0, "c:/XXX/python.exe", &StartInfo, &ProcInfo );
Voir les structures PROCESS_INFORMATION et STARTUP_INFORMATION et les possibles contrôles associés genre WaitForSingleObject(). Pas oublier ensuite le CloseHandle(ProcInfo.hThread). Et aussi pas oublier non plus de mettre la commande et les argument chacun entre double-quotes s'il y a des espaces dans les noms de répertoire ou de fichiers.
Je dis pas que c'est mieux, mais c'est comme ça que je fais pour lancer un exe avec ou sans arguments, avec ou sans attente de fin de thread, et ça m'a jamais posé le moindre problème.
Merci à toi et à AMcD, j'ai lus la doc de ShellExecute et je ne pense pas que cette fonction puisse me permettre de faire ce que je veux. CreateProcess à l'air de mieu convenir à mon problème.
Tout cela marche très bien, mais à chaque création de processus, j'ai une ligne de commande qui s'ouvre... Je n'arrive pas à faire en sorte que seul l'application graphique python s'ouvre, et non la ligne de commande. Y'a t'il un moyen pour faire cela ?
Tout cela marche très bien, mais à chaque création de processus, j'ai
une ligne de commande qui s'ouvre... Je n'arrive pas à faire en sorte
que seul l'application graphique python s'ouvre, et non la ligne de
commande. Y'a t'il un moyen pour faire cela ?
Tout cela marche très bien, mais à chaque création de processus, j'ai une ligne de commande qui s'ouvre... Je n'arrive pas à faire en sorte que seul l'application graphique python s'ouvre, et non la ligne de commande. Y'a t'il un moyen pour faire cela ?
Bertrand Lenoir-Welter
Sty :
Tout cela marche très bien, mais à chaque création de processus, j'ai une ligne de commande qui s'ouvre...
C'est quoi, "une ligne de commande qui s'ouvre" ? Tu veux parler d'une fenêtre de commandes genre MS-DOS ? Si c'est bien ça, je sais pas quoi te dire. Quand j'utilise CreateProcess(), si c'est pour lancer une appli Windows on ne voit qu'elle, et si c'est pour lancer un programme DOS, il s'ouvre dans une fenêtre DOS ou en plein écran s'il passe en mode graphique.
A mon avis, mais je peux me tromper, c'est du côté de ton exécutable Python qu'il faut chercher. S'il tourne seulement en mode console, ça risque de se compliquer. Peut-être en le plaçant hors écran ?
Sty :
Tout cela marche très bien, mais à chaque création de processus, j'ai
une ligne de commande qui s'ouvre...
C'est quoi, "une ligne de commande qui s'ouvre" ? Tu veux parler d'une
fenêtre de commandes genre MS-DOS ? Si c'est bien ça, je sais pas quoi
te dire. Quand j'utilise CreateProcess(), si c'est pour lancer une appli
Windows on ne voit qu'elle, et si c'est pour lancer un programme DOS, il
s'ouvre dans une fenêtre DOS ou en plein écran s'il passe en mode graphique.
A mon avis, mais je peux me tromper, c'est du côté de ton exécutable
Python qu'il faut chercher. S'il tourne seulement en mode console, ça
risque de se compliquer. Peut-être en le plaçant hors écran ?
Tout cela marche très bien, mais à chaque création de processus, j'ai une ligne de commande qui s'ouvre...
C'est quoi, "une ligne de commande qui s'ouvre" ? Tu veux parler d'une fenêtre de commandes genre MS-DOS ? Si c'est bien ça, je sais pas quoi te dire. Quand j'utilise CreateProcess(), si c'est pour lancer une appli Windows on ne voit qu'elle, et si c'est pour lancer un programme DOS, il s'ouvre dans une fenêtre DOS ou en plein écran s'il passe en mode graphique.
A mon avis, mais je peux me tromper, c'est du côté de ton exécutable Python qu'il faut chercher. S'il tourne seulement en mode console, ça risque de se compliquer. Peut-être en le plaçant hors écran ?
Arnold McDonald \(AMcD\)
Ou alors, le prog qui gère le CreateProcess() fait un timer, cherche la console ouverte et la ferme ? Bon, c'est clair, ça commence à devenir folklorique...
Allez, j'interviens plus avant l'année prochaine :-).
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
Ou alors, le prog qui gère le CreateProcess() fait un timer, cherche la
console ouverte et la ferme ? Bon, c'est clair, ça commence à devenir
folklorique...
Allez, j'interviens plus avant l'année prochaine :-).
Ou alors, le prog qui gère le CreateProcess() fait un timer, cherche la console ouverte et la ferme ? Bon, c'est clair, ça commence à devenir folklorique...
Allez, j'interviens plus avant l'année prochaine :-).
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
Arnaud Debaene
Bertrand Lenoir-Welter wrote:
Sty :
Tout cela marche très bien, mais à chaque création de processus, j'ai une ligne de commande qui s'ouvre...
Flag CREATE_NO_WINDOW dans le paramètre dwCreationsFlags.
Arnaud MVP - VC
Bertrand Lenoir-Welter wrote:
Sty :
Tout cela marche très bien, mais à chaque création de processus, j'ai
une ligne de commande qui s'ouvre...
Flag CREATE_NO_WINDOW dans le paramètre dwCreationsFlags.