IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

FAQ VC++ : Comment créer un programme service ?


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 101
    Points : 48
    Points
    48
    Par défaut FAQ VC++ : Comment créer un programme service ?
    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

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    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 ..


  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 588
    Points
    41 588
    Par défaut
    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).

  4. #4
    mat.M
    Invité(e)
    Par défaut
    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

  5. #5
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    Citation Envoyé par mat.M
    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.

    Une super article à lire ici.
    http://www.codeproject.com/system/serviceskeleton.asp

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par mat.M
    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
    tu n'as absolument besoin de rien de plus pour faire un service, VC6 se suffit a lui meme .
    voir exemple faq.

  7. #7
    Membre régulier Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Points : 111
    Points
    111
    Par défaut Service
    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 ?

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut Re: Service
    Citation Envoyé par jagboys
    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 ...
    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.

  9. #9
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    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

  10. #10
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par blackhorus
    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.

    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 )

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    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...

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    A noter que les drivers sont vus comme des services aussi, et peut être manipulés via la SCM.

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 101
    Points : 48
    Points
    48
    Par défaut
    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.

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par benoit70
    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).
    Citation Envoyé par farscape
    1)un service n'a pas d'interface gui et l'ulisateur ne peut donc interargir dessus.
    2)un service travaille alors que la session de windows n'est pas ouverte.
    3)un service est l'équivalent des daemons sous Unix/Linux.
    4) IIS est un service ..
    Il me semble que le 2) répond directement a ta question .
    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.

  15. #15
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    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.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/04/2009, 14h29
  2. Réponses: 0
    Dernier message: 20/12/2008, 21h19
  3. Comment créer un web service en J2EE?
    Par lady_alg dans le forum Services Web
    Réponses: 1
    Dernier message: 25/01/2008, 15h09
  4. Réponses: 1
    Dernier message: 16/06/2007, 17h06
  5. Comment créer une application Service qui lance un .exe.
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo