Relancer un .exe en c++ [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 9 novembre 2006
Statut
Membre
Dernière intervention
4 juillet 2008
-
Messages postés
4
Date d'inscription
jeudi 9 novembre 2006
Statut
Membre
Dernière intervention
4 juillet 2008
-
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

Messages postés
4
Date d'inscription
jeudi 9 novembre 2006
Statut
Membre
Dernière intervention
4 juillet 2008

Et merci encore juju12.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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.
Messages postés
4
Date d'inscription
jeudi 9 novembre 2006
Statut
Membre
Dernière intervention
4 juillet 2008

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...
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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?
Messages postés
4
Date d'inscription
jeudi 9 novembre 2006
Statut
Membre
Dernière intervention
4 juillet 2008

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.