Message de rapport:
 

Exe Windev en ServiceNT

Sujet: Exe Windev en ServiceNT
par Tonton sur 9/2/2010 23:51:20

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.html

Sinon 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
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2