DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions Service
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
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 :
  1. Cliquez sur parmi les boutons d'accès rapide.
  2. 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.
  4. Sélectionnez le type de projet à créer : "Service Windows ou Linux". Passez à l'étape suivante de l'assistant.
  5. Sélectionnez le système d'exploitation du service (Windows ou Linux). Passez à l'étape suivante de l'assistant.
  6. Indiquez le mode d'exécution (32 bits ou 64 bits).
  7. Suivez ensuite les différentes étapes de l'assistant.
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 Windows" (32 bits ou 64 bits).
  • une configuration de projet de type "Daemon Linux" (32 bits ou 64 bits).
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.
  • 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.

Remarques :
  • 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".
  • Les événements spécifiques d'un service ne sont pas pris en compte par la télémétrie : il n'est pas possible d'utiliser les fonctions de télémétrie dans ces événements.
Génération d'un service
Le service créé peut être généré en fonction de ses caractéristiques :
  • Service Windows 32 bits.
  • Service Windows 64 bits.
  • Daemon Linux 32 bits.
  • Daemon Linux 64 bits.
Pour générer le service, sous le volet "Projet", dans le groupe "Génération", cliquez sur "Générer". L'assistant de génération correspondant à la configuration en cours sera automatiquement lancé.
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 32 bits ou 64 bits correspond à l'assistant de création de l'exécutable Linux. Pour plus de détails, consultez Création de l'exécutable Linux.
Remarque : 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. 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".
  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 à l'étape suivante.
  5. Choisissez les fichiers à installer ainsi que le mode d'installation du framework.
  6. Dans l'étape "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 à l'étape suivante.
  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 à l'étape suivante.
  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.
  11. Passez à l'étape suivante.
  12. 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.
  13. Passez à l'étape suivante.
  14. Choisissez les paramètres de gestion de l'accès aux bases de données.
  15. Choisissez les modules complémentaires : licence, lisez-moi, outils optionnels, désinstallateur.
  16. 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.
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

Dernière modification : 23/06/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale