Bonjour,
Cette librairie est une encapsulation complète de l'API de services Microsoft Windows NT (NT4, 2k, XP and Vista).
Télechargement sur SourceForge.net : WinServices Library
Sommaire1. Description
- Description
- Implémentation de service
- Contrôle et gestion des services
- Contact
2. Implémentation de service
- Implémentation de service
- Implémentation minimale : 1 SEULE fonction applicative à fournir
- Encapsulation quasi complète de l'API windows de services
- Full customization par une fonction unique de callback
- Embeddable dans une Dll
- Full logging support (via Windows events logs)
- Convertit toute application C/C++ en service Windows NT
- Contrôle de services
- Installation, modification, suppression
- Start, stop, pause, redémarrage de service
- Vérification du status d'un service
- Listage de services
- Informations complètes sur un service
- Gestion des dépendances
- Gestions des services sur des machines distantes
- Divers
- Support ansi / unicode
- version 1.5 en GPL
Pour implémenter un service, il suffit juste de fournir une seule fonction de traitement !
Exemple :
Pour plus de contrôle et/ou information sur le service et ses évènements, il est possible de fournir une fonction callback.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <NTService.h> void WINAPI MyServiceMain() { while (!ServiceIsTerminated()) { if (ServiceGetCurrentStatus() == SERVICE_RUNNING) { /* code application ... */ } ServiceSleep(1000); } } int main(int argc, char** argv) { return ServiceRun("MyServiceName", MyServiceMain, 1000, SERVICE_ACCEPT_STOP); }
Exemple :
Pour utiliser le logging par défaut dans le journal système de windows, il faut inclure à votre projet les fichiers NTEventLog.xxx fournis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 DWORD WINAPI MyServiceCallback(DWORD dwEvent, DWORD dwState) { switch (dwEvent) { case SE_INSTALL: if (dwState == SS_SUCCESS) ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Installation ok")); break; case SE_DELETE: if (dwState == SS_SUCCESS) ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Uninstallation ok")); break; case SE_START: /*...*/ break; case SE_STOP: /*...*/ break; case SE_PAUSE: /*...*/ break; case SE_CONTINUE: /*...*/ break; case SE_CUSTOM: return ServiceLog(EVENTLOG_INFORMATION_TYPE, _T("Event %s - Status %s"), dwEvent, dwState); } return SS_SUCCESS; }
Sinon pour une gestion de logging personnalisée ou déja existante via des ressources stockées dans une DLL, il faut fournir sa propre dll et fournir les fichier de messages (*.mc, *.rc, *.h, ...). Cela est intéréssant uniquement quand il faut pouvoir gérer des messages en plusieurs langues.
3. Contrôle et gestion des services
La librarie fournie toute les fonctions nécessaires pour contrôler des services en local ou distants.
Exemple pour lister les services en local :
Voir la librairie pour toute les fonctions disponibles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 LPSERVICE_ITEM list = LocalServiceGetList(SERVICE_WIN32, SERVICE_STATE_ALL, &count); for (i = 0; i < count; i++) { printf("%s\n", list[i].lpDisplayName); printf("%s\n", list[i].lpServiceName); LPSERVICE_INFO info = LocalServiceGetInfo(list[i].lpServiceName); if (info) { printf("%s\n", info->lpBinaryPathName); printf("%s\n", info->lpDescription); printf("%s\n", info->lpServiceStartName); ServiceFreePointer(info); } }
4. Contact
La librairie est livrée avec des projets de test (VC6++, VS2005).
Pour toute remarque, commentaire, bug, contactez moi :
Un message sur developpez.com ou sur sourceforge.net ou à vicenzo
Have fun !!!
Partager