Exe Windev en ServiceNT
Stagiaire WDF
Inscrit:
18/11/2004 16:44
De idf
Post(s): 8
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

Contribution le : 09/02/2010 23:51

Edité par Tonton sur 10/2/2010 0:15:11
_________________
TontonPolak was Here...
Créer un fichier PDF de la contribution Imprimer


Re: Exe Windev en ServiceNT
Stagiaire WDF
Inscrit:
18/11/2004 16:44
De idf
Post(s): 8
Je m'auto-Réponds,

1 solution qui marche mais pas satisfaisante, car l'Arret du Service n'est pas géré, avec srvany.exe et instsrv.exe de Microsoft, qui permets de mettre n'importe quel executable en Service mais sans gestion des evenements du Controller SCManager j'envois la méthode ça pourra servir :

Création Service :
------------------
instsrv Mon_Service "C:\srvany.exe"

Modifie Clé Base de Registre :
------------------------------
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Nom du Service(Mon_Service)
Créer Clé "Parameters" Créer Valeur Chaine "Application" = C:\Mes Projets\Mon Projet\Exe\MonExe_Srv.exe

Suppression Service :
---------------------
instsrv Mon_Service Remove

Dans le Code de MonExe_Srv.exe, on interroge le status du Service toutes les secondes, marche pour tous les statut sauf "Démarrage en cours", "Arret en cours", "Arret"


Je cherche toujours à capturer avec windev les evenements (Démarrage, en cours, Arret, en cours ou Pause, en cours)du Controller SCManager

Il y a une grosse demande là dessus, la solution existe car développer en VB6 et marche parfaitement voici l'exemple en Download : http://dl.free.fr/tWGmZIJFR

Merci de votre aide

Tonton

Contribution le : 11/02/2010 00:33

Edité par Tonton sur 11/2/2010 0:48:33
_________________
TontonPolak was Here...
Créer un fichier PDF de la contribution Imprimer


Re: Exe Windev en ServiceNT

Inscrit:
26/02/2003 19:33
De Paris
Post(s): 16
Si pcsoft a créé l'exécutable WDSERVICE, ce n'est pas pour rien, tu peux le renommer d'ailleurs, il faut aussi renommer le .ini

En fait un executable "service" a une ou plusieurs fonctions Exportées, comme une DLL qui permet de recevoir l'ordre d'arret ou de demande d'état..

J'ai bien peur que cela ne soit pas possible en windev autrement... Il faut scinder ton executable en EXE+WDL, et la charger dans une nouvelle configuration de projet "Service"

WDSERVICE n'est pas tres different de l'executable d'entrée standard d'une application Windev... Il est peut etre possible de n'utiliser que celui ci d'ailleurs...

Contribution le : 11/02/2010 04:01
Créer un fichier PDF de la contribution Imprimer


Re: Exe Windev en ServiceNT
Stagiaire WDF
Inscrit:
18/11/2004 16:44
De idf
Post(s): 8
Merci Tanguy d'avoir pris le temps de répondre.

La solution WdService pcsoft ne me satisfait pas pour les raisons suivantes :
- Petit applicatif pour palier à un manque de Windev,
l'evenement du controller est captable par un code en C et meme vb6,
je ne sais pas pourquoi une fonction WdLanguage n'a pas été créée, d'autant que des fonctions Wdlanguage captent des evenements Windows

- Le but est de dialoguer avec le Controller de service Microsoft, autant utiliser un petit applicatif Microsoft, pour les meme limites.

- La meilleure solution reste le fait de garder le controle de ton appplicatif, les 2 solutions restent proprietaires.

bye
Tonton

Contribution le : 11/02/2010 19:07
_________________
TontonPolak was Here...
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


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