Bonjour à tous.
Voici mon problème,
J'ai crée un timer dans mon service, mais celui-ci ne fonctionne pas (je suis certain que c'est le timer car j'ai tester mon service sans et il va impec). Il y à t-il quelque chose que j'ai oublier?
Il devrai inscrire test tout les minute ds un fichier log à la racine, mais ne le fait pas :s
Voici le code (en gras : ce qui concerne le timer) :
#include <windows.h>
#include <stdio.h>
SERVICE_STATUS ssService;
SERVICE_STATUS_HANDLE sshServiceHandle;
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
void WINAPI ShutD1HCtrlHandler(DWORD Opcode);
void CALLBACK TimerProc(HWND hwnd,UINT uiMsg,UINT uiIdEvant,DWORD dwTime);
/*BOOL boR = 1;*/
UINT_PTR uiptId;
/* TASK : point d'entré du programme.*/
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE a, PSTR b, int v){
SERVICE_TABLE_ENTRY steDispatche;
steDispatche.lpServiceName = "SHUTD"; /* Nom du service. */
steDispatche.lpServiceProc = ServiceMain; /* Pointeur sur la fonction "main" du service. */
/* On démarre le service. */
if(!StartServiceCtrlDispatcher(&steDispatche)){
OutputDebugStringA("\n SetServiceStatus (fct : ShutD1HCtrlHandler) fail !");
return;
}
}
/* TASK : Fonction main du service. (Mettre les instructions à effectuer).*/
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv){
ssService.dwServiceType = SERVICE_WIN32;
ssService.dwCurrentState = SERVICE_START_PENDING;
ssService.dwControlsAccepted = SERVICE_ACCEPT_STOP;
ssService.dwWin32ExitCode = 0;
ssService.dwServiceSpecificExitCode = 0;
ssService.dwCheckPoint = 0;
ssService.dwWaitHint = 0;
/* On crée le handle du service. Ici c'est le handle du programme de control du service (ici : ShutD1HCtrlHandler). */
sshServiceHandle = RegisterServiceCtrlHandler("SHUTD",ShutD1HCtrlHandler);
if (sshServiceHandle == (SERVICE_STATUS_HANDLE)0)return;
/* Après avoir démarré le service, on change sont statut pour l'éxécuter. */
ssService.dwCurrentState = SERVICE_RUNNING;
ssService.dwCheckPoint = 0;
ssService.dwWaitHint = 0;
if (!SetServiceStatus (sshServiceHandle, &ssService)){
OutputDebugStringA("\n SetServiceStatus (fct : ServiceMain) fail !");
return;
}
/*FILE * f;
while(boR){
f = fopen("c:\\log.txt","a+");
fprintf(f,"test\n");
fclose(f);
}*/
uiptId = SetTimer(NULL,0,6000,(TIMERPROC)TimerProc); /* Si hwnd = NULL, l'id du timer est ignoré (2ième paramètre).
* Si Hwnd = NULL, SetTimer renvoie un id de type UINT_PTR, qui peut être utilisé
* pour identifier le timer. Et peu être employé dans KillTime().
*/
}
/* TASK : Gère le changement de statut du service. */
void WINAPI ShutD1HCtrlHandler(DWORD Opcode){
switch(Opcode){
case SERVICE_CONTROL_PAUSE : ssService.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE : ssService.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_STOP : {
ssService.dwWin32ExitCode = 0;
ssService.dwCurrentState = SERVICE_STOPPED;
ssService.dwCheckPoint = 0;
ssService.dwWaitHint = 0;
//boR = 0;
KillTimer(NULL,uiptId);
}
break;
case SERVICE_CONTROL_INTERROGATE :
break;
}
if(!SetServiceStatus(sshServiceHandle,&ssService)){
OutputDebugStringA("\n SetServiceStatus (fct : ShutD1HCtrlHandler) fail !");
return;
}
}
/* TASK : Fonction du timer. */
void CALLBACK TimerProc(HWND hwnd,UINT uiMsg,UINT uiIdEvant,DWORD dwTime){
FILE * f;
f = fopen("c:\\log.txt","a+");
fprintf(f,"test\n");
fclose(f);
}
Merci d'avance 
++
deck_bsd
___________________________________
[
[ Lien ]]