Windows Service vs Windows Application – Meilleures pratiques

Quand devrais-je choisir un service Windows et quand dois-je utiliser une “application d’arrière-plan” dans la zone de notification?

Si je ne me trompe pas, ma décision serait que toute application devant être exécutée avant que l’utilisateur se connecte à l’ordinateur doit être un service. Pour tout le rest, utilisez une application d’arrière-plan. Est-ce que ma décision est correcte?

De plus, si j’ai besoin de “privilèges d’administrateur” pour mon application d’arrière-plan, j’augmenterais en utilisant un manifeste. Existe-t-il un autre avantage spécifique lié au fonctionnement en tant que service?

Mes règles générales sont les suivantes

  • S’il doit toujours fonctionner, c’est un service.
  • S’il doit être exécuté sous un compte d’utilisateur particulier, Service réseau, Système local, il s’agit généralement d’un service (ou d’une application COM +).
  • Si l’utilisateur a besoin de le contrôler, il s’agit généralement d’une application de zone de notification.
  • S’il doit informer l’utilisateur de quelque chose, il s’agit d’une application de zone de notification

Le plaisir vient quand vous avez besoin d’exécuter quelque chose en tant que compte système, mais aussi d’interagir avec lui. IIS en est un bon exemple, il s’agit d’un service, mais l’administration est une application – elle doit être exécutée au démarrage, elle a besoin d’accéder à des éléments particuliers auxquels un utilisateur ne peut pas accéder normalement (c: \ inetpub), l’utilisateur doit pouvoir le démarrer, l’arrêter et le configurer.

Je concevrais une application comme un service si l’application avait un objective critique et ne devrait jamais (ou rarement) être fermée. Les services Windows fournissent de bonnes options de récupération après incident, de bonnes notifications (voir l’onglet Récupération dans la propriété du service).

Une autre bonne raison d’utiliser les services est qu’ils peuvent s’exécuter sous n’importe quel utilisateur (donc, si vous les déployez sur un serveur distant, vous pouvez vous déconnecter en toute sécurité après avoir démarré le service sans vous soucier de fermer l’application).

Je conçois également des services en combinaison avec une application de bureau capable d’interagir avec le service et peut être utilisée pour surveiller ou reconfigurer le service en cours d’exécution. De cette façon, vous pouvez bénéficier de tous les avantages d’une application de plateau dans votre service.

Cependant, vous ne devez pas utiliser abusivement les services et les utiliser, comme je l’ai dit, pour des applications classiques.

Je crois que votre décision est presque correcte, cependant, j’appendais une autre condition. Prenez par exemple le service mysqld (vous avez le choix dans ce cas, mais la plupart des gens l’exécutent en tant que service). Il est exécuté en tant que service car vous souhaitez accéder au service à tout moment via des applications potentiellement multiples. Il est important qu’il soit réactif à toutes les applications qui l’appellent, et qu’il ne représente pas grand chose d’autre chose que d’attendre de servir d’autres applications.

Juste quelque chose que je considérerais aussi en prenant ma décision.