Service: pause/arrêt/fenêtres/tray icon avec popmenu

Description

En complément à la seule source sur les Services du site de "Gaudetm" qui m' a beaucoup aidé à démarrer:
http://www.delphifr.com/codes/SERVICE-NT-TOUS-VOUS-DEVEZ-SAVOIR-INCLU-DOC_21678.aspx

Je vous apporte ma contribution (qui me semble être complémentaire à la source donnée plus haut) montrant:
- L' état du service (pause, running etc ...).
- L' interaction avec le service manager de Windows.
- L' utilisation de la propriété TService.Terminated

Cette source permet de convertir très facilement une appli en service!!!

Pour les cas oú vous devez choisir un UserName:
Si ServiceType = stWin32: TService.StartName peut être vide ou DomainName\Username ou .\Username (Merci GaudeTM)
N' oubliez pas la propriété Password!!!

Utilisation :
-------------

Compilez le projet.

Voici les commandes pour installer/désinstaller le service:
mon_service.exe /Install
mon_service.exe /Uninstall

Pour utiliser un fichier *.bat :
set SERVICEPATH=C:\Delphi\répertoire de mon service

rem Installer:
%SERVICEPATH%\mon_service.exe /install /silent

rem désinstaller:
%SERVICEPATH%\mon_service.exe /uninstall /silent

Note: /silent permet de ne pas avoir de message de confirmation ...

rem démarrer :
net start mon_service.exe

Démarrer le Service Manager de Windows :
%SystemRoot%\system32\services.msc /s

Très important:
---------------
Je conseille d' utiliser les services sans fenêtre.
Il vaut mieux appeler un executable pour montrer une fenêtre de configuration etc ... plutôt que d' avoir les Forms dans notre service.
Du moins, c' est ce qui me semble le plus logique et le plus utilisé, question de mémoire je suppose.

Mais dans certains cas, il est indispensable d' avoir au moins une fenêtre.
Dans ce cas, j' ai remarqué, comme tout application normale, que l' option Main Form (Menu Project puis Options sous Delphi) était disponible.
Cependant, toute TForm ajoutée au Service a la propriété visible à false, même la main form, ce que l' on comprend très bien para la nature du projet.
Par contre, si on met la propriété Visible de la main form à true et que l' on clique sur la croix pour fermer cette form, le service bloque.
(Notez aussi que fermer la main form ne veut pas dire fermer le service)

Pour éviter ce petit problème, j' ai trouvé une solution très simple, fallait juste y penser:
Je crée une main form (n' oubliez pas de passer par les options du projet), qui fait rien !!! Je laisse la propriété visible à false.
Je profite de cette form pour gérer les message qui viennent du Tray Icon afin d' avoir un squelette "Ready tu use" pour créer des services ...
Toutes les autres forms que je vais montrer pourront être fermées sans problème.

Conclusion :


J' aimerai pouvoir savoir lorsque l' on termine la session (le service cours toujours) en cours et lorsque l' on démarre un nouvelle session après avoir fermé la session en cours.
Cela permettrai un meilleur contrôle et ainsi, montrer l' icone sans utiliser le deuxieme Timer.
De plus, si on éteind le PC, Windows force la fermeture du service après quelques secondes, ce qui est intolérable dans certains cas tant que l' on a pas fini la tâche en cours.

Codes Sources

A voir également

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.