Bonjour,
voilà je voudrais mettre un executable windev en service NT,
en utilisant les API Windev (en aucun cas WDService ou autre dll annexe)
Le gestion d'un service NT (install, demarrage, arret, statut) ne pose pas de problème.
pour qu'un executable windev marche en service NT, il doit dialoguer avec le Controleur de Service Windows SC Controller.
et au demarrage du service lui dire, Ok je tourne,
et c'est là que je bloque
à l'initialisation projet, je mets ce code :
SERVICE_STATUS est une structure
dwServiceType est un entier
dwCurrentState est un entier
dwControlsAccepted est un entier
dwWin32ExitCode est un entier
dwServiceSpecificExitCode est un entier
dwCheckPoint est un entier
dwWaitHint est un entier
FIN
ServiceStatus est un SERVICE_STATUS
SERVICES_ACTIVE_DATABASE est une chaîne = "ServicesActive"
ch_Nom_Serveur est une chaîne = NetNomMachine()
SC_MANAGER_ALL_ACCESS est un entier = 0xF003F
SERVICE_ALL_ACCESS est un entier = 0xF01FF
e_hSCManager est un entier = 0
e_hService est un entier = 0
ch_Nom_Service est une chaîne = "Aaa_Test"
e_hSCManager = AppelDLL32("ADVAPI32.DLL", "OpenSCManagerA", &ch_Nom_Serveur, &SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
SI e_hSCManager = 0 ALORS
Trace("Pas OpenSCManagerA : ")
FIN
e_hService = AppelDLL32("ADVAPI32.DLL", "OpenServiceA", e_hSCManager, &ch_Nom_Service, SERVICE_ALL_ACCESS)
SI e_hService = 0 ALORS
Trace("Pas OpenServiceA : ")
FIN
ret est un entier
ServiceStatus:dwCurrentState = SERVICE_RUNNING
ret = AppelDLL32("ADVAPI32.DLL", "SetServiceStatus", e_hService, &ServiceStatus)
ret est toujours à 0, je n'arrive pas à faire dialoguer l'exe et le SCManager,
j'ai essayé une autre methode sans succès :
1 - OpenSCManagerA
2 - OpenServiceA
3 - Init de structure SERVICE_STATUS
ServiceStatus:dwServiceType = SERVICE_WIN32_OWN_PROCESS
ServiceStatus:dwCurrentState = SERVICE_START_PENDING
ServiceStatus:dwControlsAccepted = SERVICE_ACCEPT_STOP OR SERVICE_ACCEPT_SHUTDOWN OR SERVICE_ACCEPT_PAUSE_CONTINUE
ServiceStatus:dwWin32ExitCode = 0
ServiceStatus:dwServiceSpecificExitCode = 0
ServiceStatus:dwCheckPoint = 0
ServiceStatus:dwWaitHint = 0
4 - RegisterServiceCtrlHandlerA
5 - Changement de status
ServiceStatus:dwCurrentState = SERVICE_RUNNING
ServiceStatus:dwControlsAccepted = SERVICE_ACCEPT_STOP_PAUSE_CONTINUE
6 - SetServiceStatus
et une autre méthode en c :
http://www.tenouk.com/ModuleEE.htmlSinon pire des cas j'ai un code VB6 qui marche avec récupération des evenements du SCManager (CreateEventW),
mais j'avoue j'ai du mal à convertir en WDLangage
si quelqu'un à un code de communication avec le SCManager, je prends
Merci de l'aide
Bye
Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=18&topic_id=6342&post_id=25097