1.Qu'est ce qu'un programme service en fait?
2.Quelle est son utilité?
3.Et avantage par rapport à un thread de travail.
Merci
1.Qu'est ce qu'un programme service en fait?
2.Quelle est son utilité?
3.Et avantage par rapport à un thread de travail.
Merci
un service n'a pas d'interface gui et l'ulisateur ne peut donc interargir dessus.
un service travaille alors que la session de windows n'est pas ouverte.
un service est l'équivalent des daemons sous Unix/Linux.
IIS est un service ..
un service peut être exécuté par le compte LocalSystem (celui qui a tous les droits et tous les privilèges, il est plus puissant qu'Administrateur).
et de rajouter : il faut le Device Driver Kit pour le développer.
C'est limite niveau assembleur car c'est une couche en dessous de la couche application
, là, je crois que tu parles des drivers.... les services sont des simples programmes windows, qui sont démarés par Service Control Manager (SCM), au démarrage de Windows.Envoyé par mat.M
Une super article à lire ici.
http://www.codeproject.com/system/serviceskeleton.asp
tu n'as absolument besoin de rien de plus pour faire un service, VC6 se suffit a lui meme .Envoyé par mat.M
voir exemple faq.
Bonjour à tous,
Je me permet de m'introduire dans ce post concernant les services.
En fait j'ai un programme avec une interface GUI pour afficher l'etat actuel du programme (textes, barre de progression ...). Ce programme utilise plusieurs threads car les opérations que je fais sont très lourdes (parcourt plus de 400 Go de fichiers). J'ai fait plusieurs thread pour mettre à jour le GUI et ne pas scotcher l'application.
Est ce qu'en faisant un service, suis je obliger de faire des threads ?
Si je vais une seul fonction qui prend pas mal de ressource processeur, le service va t il perturber windows ?
Merci pour vos eclaircissements ?
dans ton cas je ne vois pas trop l'interet d'un service qui risque de mettre windows a genoux sans indications pour l'utilisateur ...Envoyé par jagboys
sinon effectivement tu n'est pas obligé d'avoir plusieurs thread mais ça depend de l'architecture de ton traitement..
de plus si ton traitement doit communiquer vers l'exterieur il faudra envisager une communication avec un programme windows pour afficher les resultats.
Bonsoir
Un programme service est d'abord un exécutable.
Un programme service est soumis au control du Service Manager de Windows.
Un programme service se trouve dans le gestionnaire de service de windows.
Un programme service est sans interface utilisateur (du moins généralement)
Un programme service peut être crée facilement en utilisant l'assistant ATL qui propose trois options.
1. Créez une dll ave la classe de module CAtlDllModuleT
2. Créez un programme exécutable avec la classe de module CAtlExeModuleT
3. Créez un programme exécutable service avec la classe de module CAtlServiceModuleT
Dans l'hiérarchie des classe CAtlServiceModuleT dérive de CAtlExeModuleT. En d'autres termes le service est un programme exécutable particulier.
D'ailleurs la classe CAtlServiceModuleT offre toutes les fonctionnalités relatifs à un programme service.
Cette classe se charge de:
1. l'installation/désintallation du service avec ses méthodes CAtlServiceModuleT::Install() et CAtlServiceModuleT::Uninstall()
2. l'inscription dans la base de registre en tant que service local avec sa méthode CAtlServiceModuleT:arseCommandLine()
3. de la connection avec le SCM avec sa méthode CAtlServiceModuleT::Start()
4. de l'interception des évènements (STOP, PAUSE, CONTINUE) émis par le SCM avec les méthodes qu'il faut surcharger dans la classe dérive (CMyModule::OnStop(), CMyModule::OnPause(), CMyModule::OnContinue(), CMyModule::OnInterrogate(), etc)
Le code du service peut s'exécuter dans une méthode qu'il faut surchargée soit CAtlServiceModuleT::ServiceMain() ou CAtlServiceModuleT::Run().
En surchargeant soigneusement les méthodes de la classe de base CAtlServiceModuleT, on est épargné de créer soi-même la connection avec le SCM et de créer également un thread pour le code spécifique au service.
Le programme service peut également tourné comme simple programme exécutable du fait que la classe module dérive de CAtlExeModuleT. Ce qui permet de faire un bon déboguage d'un programme service. Il suffit de lui passer les bons arguments en ligne de commande.
Par exemple /regserver : pour touner en tant que simple exe (local server)
/service: pour tourner en tant que local service
/install: pour l'nstaller
/uninstall: pour le désintaller
On peut définir ces propres arguments et lui donner une tâches spécifique à faire.
On peut communiquer avec un programme service en définissant un objet COM dedans. A partir d'un programme client MFC on crée l'objet COM ce qui a pour conséquence de démarrer le service sans passer par le gestionnaire de service de windows dans panneau de configuration
Avec les méthodes de l'interface de l'objet COM le programme client MFC peut commander le service (arrêter, démarrer, mettre en pause, continuer); on dirait le petit cousin du SCM de Windows.
On peut constater le résultat de cette commande en examinant le gestionnaire de service de Windows car il définit l'état des boutons de commandes (activé/désactivé) lorsque le service est piloté par le programme client.
Bon bon je m'arrête...
Gabrielly
Envoyé par blackhorus
Merci Blackhorus mais je sais ce que c'est tout de même un service ; tu ne vas pas m'apprendre l'informatique tout de même !
Je sais faire la différence entre un service Windows et un gestionnaire de périphérique ( Device Driver )
attention a ne pas vous egarer sur la question de benoit70,
son propos n'est pas de savoir comment faire un service mais de comprendre son utilité .
son titre de question reprend simplement le titre du post de la faq...
A noter que les drivers sont vus comme des services aussi, et peut être manipulés via la SCM.
merci farscape de remettre certaines réponses dans le contexte de la requete.
Peut tu me donner un exemple tres simple de service que l'on pourrait coder rapidement qui illustre ce concept de service, et que l'on ne peux pas faire avec un thread de travail(Thread avec CreateThread de Win32).
Afin que je comprenne l'UTILITE.
Merci de ta précision.
Envoyé par benoit70Il me semble que le 2) répond directement a ta question .Envoyé par farscape
le problème ne se situe pas a :ce que l'on ne peux pas faire avec un thread de travail
Un service peut contenir plusieurs thread de travail....
Pouvoir faire un programme qui tourne en tache de fond alors que la session Windows n'est pas ouverte ou encore qui tourne quelque soit la session Windows me semble une caractéristique importante le différenciant d'un programme Windows classique...
Les exemples nécessitants un service sont nombreux:
Un serveur FTP, un moteur de base de données, un anti-virus, un serveur
Internet (IIS) etc...
Tous doivent fonctionner alors que la session Windows n'est pas forcément ouverte et aussi sur toutes les sessions utilisateurs.
Consulte la liste des services de ton Windows, tu verras quel genre de soft necessite d'être fait ainsi.
Un service est un thread. N'importe quel appli est au moins un thread. Mais un service c'est un thread (process) géré par l'OS, et non par l'utilisateur qui décide quand le lancer, quand le tuer, etc...
service : offrir un service : souvent c'est un service offert par l'OS, un constituant de l'OS. Beaucoup de services natifs Windows sont liés au reseau. Y'a des notions complexes après, telles que les dépendances entre services, la gestion des privilèges, qui expliquent que c'est un peu plus évolué qu'un simple thread lancé via CreateThread.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager