PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Qu'est-ce qu'un service ?
  • Dans quels cas utiliser un service ?
  • Différences entre un service et une application
  • Création d'un service avec WINDEV
  • Création d'un service
  • Développement d'un service
  • Programmation d'un service
  • Génération d'un service
  • Création de l'installation d'un service Windows 32 ou 64 bits
  • Créer l'installation d'un service Windows 32 ou 64 bits
  • Services créés avec les versions antérieures à WINDEV 15
  • Services créés avec l'exemple "WD Service NT"
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Créer un service avec WINDEV
Présentation

Qu'est-ce qu'un service ?

Un service est une forme spécifique d'application destinée à être exécutée sans intervention de l'utilisateur.
Un service peut être configuré pour démarrer automatiquement en même temps que le système d'exploitation et pour fonctionner en tâche de fond.
Linux Les services sont également appelés daemons.

Dans quels cas utiliser un service ?

Un service doit être utilisé pour permettre à une application de répondre à tout moment à une sollicitation externe (lecture sur une socket par exemple).
Si le service doit se contenter d'exécuter une tâche de façon répétée, il est préférable de faire une application standard et de lancer cette application dans une tâche planifiée.

Différences entre un service et une application

  • Un service tourne toujours sous l'identité du même utilisateur (configuré lors de son installation) quel que soit l'utilisateur connecté à la machine.
  • Un service ne peut pas avoir d'interaction directe avec l'utilisateur connecté. L'ouverture d'une fenêtre avec Ouvre est possible (par exemple pour créer un traitement graphique sur des images), mais sa fermeture doit être systématique une fois le traitement effectué. De façon générale, il ne doit pas y avoir d'appel de fonction bloquante (Info, Dialogue, Saisie...).
  • Un service qui utilise une base de données HFSQL et plus généralement les fonctions H* pour l'accès à une base de données doit gérer les conflits (doublons, intégrité, modification, ...) grâce à la fonction HSurErreur. Dans le cas contraire, le service pourra être bloqué en cas de conflit.
  • Windows Un service peut fonctionner sous l'identité du système d'exploitation lui-même.
  • Windows Un service n'est pas soumis à l'UAC ou à la virtualisation (à partir de Windows Vista).
Création d'un service avec WINDEV

Création d'un service

WINDEV permet de créer un service :
  • soit à partir d'un nouveau projet.
  • soit à partir d'un projet existant.
Pour créer un service à partir d'un nouveau projet, il suffit d'utiliser l'option "Fichier .. Nouveau .. Projet". L'assistant de création de projet se lance.Pour créer un service à partir d'un nouveau projet :
  1. Cliquez sur parmi les boutons d'accès rapide.
  2. Dans la roue qui s'affiche, cliquez sur "Projet". La fenêtre de création d'un nouvel élément s'affiche : cliquez sur "Projet".
  3. L'assistant de création de projet se lance.
Dans un des premiers écrans de l'assistant, vous pouvez choisir le type de génération de votre projet. Il suffit de sélectionner "Service Windows" puis la plateforme d'exécution (Windows ou Linux) et de suivre l'assistant.
Par défaut, le projet permettra de générer des services Windows 32 bits.
Pour créer un service à partir d'un projet existant, il suffit d'ajouter une nouvelle configuration de projet (option "Projet .. Configurations de projet .. Nouvelle configuration"). Il est possible de créer : Pour créer un service à partir d'un projet existant, il suffit d'ajouter une nouvelle configuration de projet : sous le volet "Projet", dans le groupe "Configuration de projet", déroulez "Nouvelle configuration". Il est possible de créer :
  • une configuration de projet de type "Service" (32 bits).
  • une configuration de projet de type "Service 64 bits".
  • une configuration de projet de type "Daemon Linux".
Pour plus de détails, consultez Configuration de projet.
Développement d'un service

Programmation d'un service

Le projet créé dispose de deux événements supplémentaires pour gérer le service :
EvénementEffet
Exécution du service (appelé en boucle)Cet événement est l'événement principal du service. Il est appelé en boucle quand le service est démarré (automatiquement au boot ou par un appel à la fonction ServiceDémarre).
Dans la majorité des cas, cet événement va se mettre en attente d'une sollicitation extérieure (par exemple en créant une socket et en appelant ensuite la fonction SocketAttendConnexion) puis déclencher des actions en réponse à cette sollicitation.
Dans le cas des services qui exécutent des actions en continue, il convient d'appeler la fonction ServiceTemporise à chaque passage dans cet événement afin de ne pas consommer toutes les ressources processeur de la machine.
Notes :
  • Lorsque du code doit être partagé entre un service et une application (par exemple une classe), il est possible de connaître le mode d'exécution grâce à la fonction EnModeService.
  • Versions 20 et supérieures
    Si la fonction SysDétecteSessionVerrouillée est utilisée dans un service, utilisez la fonction Multitâche dans le code d'exécution du service pour recevoir les messages Windows.

    Multitâche(-1)
    Nouveauté 20
    Si la fonction SysDétecteSessionVerrouillée est utilisée dans un service, utilisez la fonction Multitâche dans le code d'exécution du service pour recevoir les messages Windows.

    Multitâche(-1)
    Si la fonction SysDétecteSessionVerrouillée est utilisée dans un service, utilisez la fonction Multitâche dans le code d'exécution du service pour recevoir les messages Windows.

    Multitâche(-1)
Arrêt du serviceCet événement est appelé automatiquement lorsque le service reçoit une demande d'arrêt (par un appel à la fonction ServiceArrête ou lors de l'arrêt de la machine).
Cet événement est appelé dans un thread différent de l'événement "Exécution du service".
Si l'événement principal est bloqué en attente sur une ressource (par exemple une socket), il appartient à l'événement "Arrêt du * service" de détruire la ressource pour débloquer l'événement principal.
Note : A partir du début du processus d'arrêt du service, l'événement "Exécution du service" n'est plus appelé en boucle.
Remarque : Pour éditer les événements spécifiques d'un service, utilisez l'option de menu "Projet .. Code du projet".Remarque : Pour éditer les événements spécifiques d'un service : sous le volet "Accueil", dans le groupe "Général", déroulez et sélectionnez "Code du projet".
Génération d'un service
Trois modes de génération d'un service sont disponibles :
  • Générer le service Windows (32 bits).
  • Générer le service Windows (64 bits).
  • Générer le deamon Linux.
Ces options sont disponibles dans le menu "Atelier .. Services". Un assistant de génération vous guide dans la génération du service.Ces options sont disponibles dans le menu de génération de l'application.
Un assistant de génération vous guide dans la génération du service.
Remarque : Si la génération proposée ne correspond pas à la configuration de projet en cours, WINDEV propose automatiquement de créer une nouvelle configuration de projet correspondant à la génération voulue.
L'assistant de génération :
  • du service Windows 32 bits ou 64 bits correspond à l'assistant de création de l'exécutable. Pour plus de détails, consultez Création de l'exécutable.
  • du service Linux correspond à l'assistant de création de l'exécutable Linux. Pour plus de détails, consultez Création de l'exécutable Linux.
Le téléchargement automatique du Framework WINDEV n'est pas disponible pour les services.
Création de l'installation d'un service Windows 32 ou 64 bits

Créer l'installation d'un service Windows 32 ou 64 bits

Pour créer l'installation d'un service Windows 32 ou 64 bits :
  1. Sélectionnez l'option de menu "Atelier .. Services .. Créer la procédure d'installation du service".Déroulez l'icône de génération parmi les boutons d'accès rapide et sélectionnez l'option "Créer la procédure d'installation du service".
    Remarque : si la configuration en cours ne correspond pas à la configuration du service, cette option est disponible dans le menu "Autres générations".
  2. La première partie de l'assistant vous guide dans la génération du service (voir paragraphe précédent). Si la configuration en cours est un service 32 bits, la génération est réalisée en 32 bits. Si la configuration en cours est un service 64 bits, la génération est réalisée en 64 bits.
  3. Choisissez le mode d'installation :
    • Installation autonome : cette installation peut être exécutée directement sur le poste où le service doit être installé.
    • Installation en Push : cette installation permet de déployer le service à distance sur de nombreux postes connectés en réseau.
  4. Indiquez le répertoire où sera installé par défaut le service. Passez au plan suivant.
  5. Choisissez les fichiers à installer ainsi que le mode d'installation du framework.
  6. Dans l'écran "Description du service", précisez :
    • Le nom du service (à utiliser en programmation dans les fonctions ServiceDémarre ou ServiceInfo par exemple).
    • Le nom complet du service (affiché dans la colonne "Nom" du gestionnaire de services).
    • La description du service (affiché dans la colonne "Description" du gestionnaire de services).
      Passez au plan suivant.
  7. Choisissez les paramètres de démarrage du service:
    • Automatique (par défaut)
    • Manuel
    • Désactivé
      Remarque : Il est possible de démarrer le service en mode différé. Cette fonctionnalité est disponible uniquement à partir de Windows Vista.
  8. Sélectionnez le mode de gestion d'erreur en cas d'échec de démarrage du service :
    • Ignorer les erreurs.
    • Inscrire les erreurs dans le journal d'événements.
    • Inscrire les erreurs dans le journal d'événements et redémarrer la machine avec la dernière configuration valide.
    • Inscrire les erreurs dans le journal d'événements et redémarrer la machine.
  9. Indiquez les paramètres de la ligne de commande à donner lors du démarrage du service. Passez au plan suivant.
  10. Indiquez les paramètres de gestion des erreurs du service.
    Plusieurs défaillances successives peuvent être détectées. Pour chacune d'entre elles, sélectionnez le mode de gestion des erreurs parmi les possibilités suivantes :
    • Ne rien faire.
    • Redémarrer le service (par défaut).
    • Redémarrer la machine.
    • Exécuter un programme.
      Passez au plan suivant.
  11. Indiquez le compte utilisateur sous lequel le service devra s'exécuter :
    • Compte système local (par défaut).
    • Compte service local.
    • Compte service réseau.
    • Compte utilisateur sélectionné parmi des comptes existants.
      Remarque : Lorsque le service s'exécute avec le compte système local (par défaut), ce service n'a pas accès au réseau. Si les événements du service doivent accéder au réseau, il faut nécessairement indiquer pour son exécution le compte service réseau ou un utilisateur du domaine.
      Passez au plan suivant.
  12. Choisissez les paramètres de gestion de l'accès aux bases de données.
  13. Choisissez les modules complémentaires : licence, lisez-moi, outils optionnels, désinstallateur.
  14. Selon le mode d'installation choisi (autonome ou push), indiquez les options demandées.
L'assistant va ensuite générer l'installation du service.
Services créés avec les versions antérieures à WINDEV 15

Services créés avec l'exemple "WD Service NT"

Si vous aviez utilisé l'exemple "WDService NT" pour créer un service avec une version antérieure à WINDEV 15, vous pouvez le convertir en un service WINDEV de la façon suivante :
  1. Ouvrez le projet dans WINDEV (version 15 ou supérieure).
  2. Créez une nouvelle configuration de type "Service Windows".
  3. Dans l'événement "Initialisation" du projet, appelez la procédure "InitService" de votre projet.
  4. Dans l'événement "Exécution du service", appelez la procédure "Service" de votre projet.
  5. Dans l'événement "Arrêt du service", appelez la procédure "FinService" de votre projet.
Liste des exemples associés :
WD Service Exemples didactiques (WINDEV) : WD Service
[ + ] Cet exemple illustre la création d'une application de type "service" avec WINDEV.

Résumé de l'exemple livré avec WINDEV :
Un service est un programme résident qui peut fonctionner hors session Windows (démarrage de l'application avant le "Login" Windows).
Ce type d'application n'a généralement pas d'interface (pas de fenêtres)
Par exemple, un service peut être un automate de traitements (automatisation d'un traitement batch).
Cet exemple montre comment créer un programme de type 'Service' avec WINDEV.
Les fonctions Service Exemples unitaires (WINDEV) : Les fonctions Service
[ + ] Utilisation des fonctions ServiceXXX pour :
- lister les services installés
- démarrer un service
- arrêter un service
- mettre en pause et relancer un service.

Les fonctions services sont disponibles pour le poste local et également sur un poste distant.
Note : Pour utiliser les services d'un poste distant, il est nécessaire de posséder les droits d'administrateur sur ce poste.
Version minimum requise
  • Version 11
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire