GESTION DES SERVICES WINDOWS PAR LES API DANS UNE CLASSE

Signaler
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006
-
Micky0001
Messages postés
1
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
2 juin 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37912-gestion-des-services-windows-par-les-api-dans-une-classe

Micky0001
Messages postés
1
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
2 juin 2009

je sais ca deterre mais il y a un probleme
ne pas oublier le using namepsace std;
sinon ca fais tt foirer ^^
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
18
C'est très clair, la compil ok indique seulement que la syntaxe du langage est correcte, que le prog ne plante pas est une toute autre affaire.
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

dernière petite chose

BOOL hServiceStatus;
BOOL hControlService;
BOOL hStartServices;

« h » désigne un « HANDLE », pas un BOOL

BOOL bServiceStatus;
BOOL bControlService;
BOOL bStartServices;
// serait plus ... approprié

// ton code
hServiceStatus = QueryServiceStatus( ... );

quand on lit ca, on ce dit, ah! QueryServiceStatus() retourne un « HANDLE », mais non! c'est faux! QueryServiceStatus() retourne un « BOOL » !
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

en passant, retire cette phrase « pas d'erreur de compilation »
je ne veux pas être méchant mais c'est ridicule puisque
« 0 error(s), 0 warning(s) » ne veut strictement _rien_ dire ...
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

pour la Xeme fois

#include <stdlib.h> // C
#include <cstdlib> // C++
#include // BAD! sans .h << cette version est obsolète(elle existe encore pour une raison de compatibilité avec de ~vieux programmes)
#include // GOOD

ta gestion des chaines de caractères est _Complètement_ nulle

Cl_SVR::Cl_SVR(){
service="\0"; // c'est un char*, pas d'allocation mémoire ni rien d'autre du genre
strcat(service,"inort"); // ca va faire !!!CABOUME!!!
nompc="\\\"; strcat(nompc,getenv("COMPUTERNAME")); // ca aussi!
Status();
}//end procedure

pourquoi est-ce que tu n'utiliserais pas les basic_string hein?

#include <string>

class Cl_SVR
{
// ...
string service;
string nompc;
// ...
};

Cl_SVR::Cl_SVR() : service("inort"), nompc("\\\")
{
nompc += getenv("COMPUTERNAME");
Status();
}//end procedure

Cl_SVR::Cl_SVR(const char * s,const char * pc) : service(s), nompc("\\\")
{
nompc += pc;
Status();
}//end procedure

service.c_str() pour obtenir un pointeur sur la chaine

const char* c_str() const {
return un_pointeur_sur_la_chaine;
}


etc...
etc...
etc...

void Cl_SVR::PsKill(const char * proc)
{
//char * cmd = new (char[100]);
char cmd[100+1]; // si tu ne veux pas libérer la mémoire alors pas de « new » !
snprintf(cmd, 100, "pskill -t %s %s >log.txt", nompc, proc);
//strcpy(cmd,"\0");
//strcat(cmd,"pskill -t ");
//strcat(cmd,nompc);
//strcat(cmd," ");
//strcat(cmd,proc);
//strcat(cmd," >log.txt");
system(cmd);
}//end function

Je suis désolé de te le dire mais ton code n'est pas bon, mais pas du tout!
Va reviser la « Gestion Des Chaînes De Caractères » !!!

si tu utilise un « char* », tu dois lui assigner/allouer de la _Mémoire_
tu ne peux pas manipuler ton pointeur, qui, pointe sur _Rien_ !

sinon, comme j'ai dit plus haut, utilise basic_string >> #include <string>
avec basic_string, pas besoin de t'occuper de la gestion de la mémoire, basic_string le fait tout seul comme un grand!

autre petite chose, pour le « status », utilise un entier quelconque pour connaître le status et non une chaine, avec un entier ca serait tellement plus simple/rapide/... et surtout, beaucoup mais beaucoup moins lourd à gérer. si tu tiens absolument a obtenir le status en « texte », ajoute une simple/petite/... fonction qui va te retourner le status(en texte)

const char* getStatusString(int nStatus)
{
switch (nStatus)
{
case X: return "status X";
case Y: return "status Y";
// ...
default: break;
}
return "unknown status";
}


...
...
...