Creer et lancer un service windows [Résolu]

Cybernus
Messages postés
12
Date d'inscription
mardi 3 juin 2003
Dernière intervention
8 mars 2006
- 6 mars 2006 à 21:30 - Dernière réponse : yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
- 8 mars 2006 à 06:30
Bonjour à toutes et à tous :)

J'ai à nouveau besoin de votre aide et de vos conseils avisés.
Je cherche a creer un service a partir d'un executable exterieur à un programme, comme le ferait sc.exe, présent sur windows XP.

J'ai beau chercher, la plupart des exemples disponibles cree un service:
- soit codé directement dans le programme, le service n'est qu'un "morceau de code" qui tourne
- soit appliqué sur un executable choisi, comme dans l'exemple d'Arnotic, présent sur ce site.

j'ai essayé différents exemples, j'en suis arrivé finalement au code suivant, mais l'erreur est toujours la meme:
le service est bien crée, mais impossible de le lancer.
si on tente de le lancer depuis le gestionnaire de service windows, on rencontre une joyeuse messagebox qui nous dit:
"impossible de demarrer le service X sur Ordinateur Local
Erreur 1053: le service n'a pas répondu assez vite a la demande de lancement ou de controle"

int NewService(char* displayedname, char* name, char* path)
{
SC_HANDLE Service;
SC_HANDLE consoleSCManager;

consoleSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(NULL == consoleSCManager) {
printf("erreur lors de l'ouverture du Service Manager\n");
return 1;
}
Service = CreateService(
consoleSCManager,
displayedname,
name,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
path,
NULL, NULL, NULL, NULL, NULL);

if(Service == NULL) {
printf("Impossible de créer le service\n");
}
CloseServiceHandle(Service);
CloseServiceHandle(schSCManager);
return 0;
}

:(
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
- 7 mars 2006 à 18:15
3
Merci
Je croix qu'il y a tout dans une de mes sources : explication et exemple
http://www.cppfrance.com/codes/SERVICE-WINDOWS-POUR-MAINTENIR-CONNEXION-INTERNET_27660.aspx

La il te manque pas mal de chose dans ta source. Soit tu n'a pas mis tout le code soit il faut que tu revoit le principe de fonctionnement d'un service.
En quelque mot, tout ce que tu a fait la c'est de creer une entrer dans la base de registre. Il manque 2 choses principales:

<OL>
<LI><SAMP>//---------------------------------------------------------------------------</SAMP>
<LI><SAMP>//Fonction de control de l'état du service</SAMP>
<LI>
<LI>
void
WINAPI ServiceCtrlHandler(DWORD Opcode) </LI></OL>

et


<OL>
<LI><SAMP>//---------------------------------------------------------------------------</SAMP>
<LI><SAMP>//Fontion principal où se situe le code que le service execute</SAMP>
<LI>
<LI>
void
WINAPI ServiceMain(DWORD argc, LPTSTR *argv) </LI></OL>
A l'époque j'avais trouver de nombreux site d'inforamtion a ce sujet mais apres de longue (tres longue) recherche. Tout ce que j'ai trouvé etait en anglais.
Rapidement j'ai trouvé cela http://www.codeproject.com/system/windows_nt_service.asp qui a l'air pertinant


*********************

Introduction

A Windows service is an EXE specially designed to communicate with the SCM (Service Control Manager) of Windows NT/2000. The Service Control Manager (SCM) maintains a database of installed services and driver services, and provides a unified and secure means of controlling them. SCM is started at system boot and it is a remote procedure call (RPC) server. As a developer to try a simple service, we can divide the program into four parts.


<OL>
<LI>Main program of Win32 / Console Application.
<LI>A so called
ServiceMain()
, main program of Service. Entry point of a service.
<LI>A Service Control Handler, a function to communicate with SCM.
<LI>A Service Installer/ Uninstaller, to register an EXE as a Service.</LI></OL>
*********************

Bon courrage

Merci yserver 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de yserver
yoyo269
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Dernière intervention
11 janvier 2009
- 7 mars 2006 à 09:02
0
Merci
Tu pourrais m'expliquer ce qu'est un service, parce que ça à l'air très intéressant et utile ?
Merci d'avance.

YOYO, @+.
YOYO
Commenter la réponse de yoyo269
Cybernus
Messages postés
12
Date d'inscription
mardi 3 juin 2003
Dernière intervention
8 mars 2006
- 7 mars 2006 à 13:05
0
Merci
on trouve des explications partout sur le net.
ici par exemple:
http://www.itrmanager.com/46119-dossier,bien,gerer,services,windows,1ere,partie.html

:)
Commenter la réponse de Cybernus
Cybernus
Messages postés
12
Date d'inscription
mardi 3 juin 2003
Dernière intervention
8 mars 2006
- 8 mars 2006 à 00:14
0
Merci
Donc, si je veux que mon service se résume a lancer un executable passé en argument a la fonction, je dois quand meme creer tout ceci ?
Je suppose que je dois alors le lancer depuis la ServiceMain, avec un ShellExecute, un CreateProcess ou une API dans le genre, c'est bien cela ?
Commenter la réponse de Cybernus
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
- 8 mars 2006 à 06:30
0
Merci
Oui c'est ca.
Commenter la réponse de yserver

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.