Relancer un .exe en c++

Résolu
emitaire Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 4 juillet 2008 - 3 juil. 2008 à 17:07
emitaire Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 4 juillet 2008 - 4 juil. 2008 à 13:00
Bonjour,
J'ai developpez un petit programme ecoute le port 143 (IMAP pour l'arrivée des mails), je compile mon programme pour avoir un .exe que je lance pour tester. Jusque là tout marche trés bien.
Je veux a présent developper un WatchDog qui veille au relancement de cet exe si ce derneir crache. Donc une sorte de moniteur qui le ralance. Le problème c'est que je veux que ce watchDog soit valable sous windows mais aussi sous linux car mon listener l'est.

Merci encore pour votre aide.

5 réponses

emitaire Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 4 juillet 2008
4 juil. 2008 à 13:00
Et merci encore juju12.
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
3 juil. 2008 à 18:05
Tu peux développer une autre application qui tournera en même temps que ton prog et qui vérifiera sa présence de temps en temps; en cas de plantage elle le relance.
0
emitaire Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 4 juillet 2008
3 juil. 2008 à 18:15
Trés bonne réponse.
Oui mais justement, il faut savoir quel methode utiliser en c++?? comment recuperer le pid du processus qui est derriere mon exe pour le controller en c++?? comment relancer ce processus ?? c'est a ces questions que j'ai besoin d'une réponse...
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
3 juil. 2008 à 21:14
Je ne sais pas s'il existe de librairies portables permettant de faire cela. Au pire tu peux faire une version une version Windows et une version Linux avec les APIs respectives non?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emitaire Messages postés 4 Date d'inscription jeudi 9 novembre 2006 Statut Membre Dernière intervention 4 juillet 2008
4 juil. 2008 à 13:00
Bon voilà je crois que j'ai trouvé une réponse,mais c'est valable que sous windows: Je recupere tout les exe qui sont en cours sur ma machine, et je compare chaque exe avec le nom de celui que je veux controler, et si je ne le retrouve plus ,je le relance comme n'importe quel autre .exe, voici le code:
bool

process_exists(string monProcess){

DWORD processes[200], nb_processes;

char process_name[100];

int i;HANDLE hprocess;

EnumProcesses(processes,

sizeof(processes),&nb_processes);

//On teste tous les processus pour voir si leur nom correspond

for(i=0;i < nb_processes/
sizeof (DWORD);i++){

hprocess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processes[i]);

//Prend le nom du processus et le met dans process_nameGetModuleBaseName(hprocess, GetModuleHandle(NULL), process_name,

sizeof(process_name) );cout << "--process :" << process_name << " id :" << processes[i] << endl;

CloseHandle(hprocess);

//Ce processus est il le même que celui demandé

if (((string)process_name).compare(monProcess) == 0){

return
true;}

}

return
false;}

Bonne journée.
0
Rejoignez-nous