Prévue application console vs Windows service? Quand est-il approprié d'utiliser chaque
Je viens de lire ceci: Quel est l'avantage du développement de l'application en tant que service windows? mais je suis toujours pas sûr de quand utiliser un service windows.
J'ai quelques tâches qui doivent être exécutés à intervalles réguliers (c'est à dire toutes les 5 minutes). Qui type de projet doit-je utiliser? Existe-il des exemples de types d'applications qui doivent être les services de Windows?
- Si vous allez au service de la route, ne pas utiliser la minuterie. Il plante et laissez votre service, dans un état de fonctionnement, mais il ressemble à son exécution.
- Je ne sais même pas ce que cela signifie pour un compte à rebours pour "crash". Les minuteries sont partie de l'OS, et si qui bloque votre service a plus de problèmes que de simplement la minuterie.
- Compteurs ne sont pas partie de l'OS. Voir ce post DONC pour plus d'info. stackoverflow.com/questions/397744/...
- Voir ici aussi support.microsoft.com/kb/842793. Il est dit .NET 1.x est affecté, mais je peux vous dire que jusqu'à présent, TOUTES les versions du framework souffrent de cette.
Vous devez vous connecter pour publier un commentaire.
Pour toute tâche planifiée, j'avais l'habitude de recommander un Service Windows, pour les raisons suivantes:
Autant que d'autres exemples d'applications qui peuvent être les services de windows, un grand nombre de fois, ils sont utiles pour des applications telles que l'accès distant - vous pouvez disposer d'un service d'exécution d'un serveur distant auquel les clients se connectent. Évidemment très utile pour le traitement des données des tâches que vous souhaitez exécuter en arrière-plan, ou processus où vous voulez envoyer un email à certaines conditions, etc.
En général, j'ai toujours trouvé que les tâches planifiées pour être beaucoup plus fragile et peu fiable. Et, sauf si vous avez connecte correctement, souvent plus difficile à déboguer.
En référence à l'un bug avec la Minuterie si vous lisez le rapport de bug sur le MME site, vous pouvez voir qu'elle est causée lorsque vous appelez "Stop" à l'intérieur de la Timer_Elapsed événement. La réponse à cela est simple - ne pas appeler à l'arrêt. Au lieu de cela, enveloppez le tout dans une case pour un "IsRunning" booléen et ne fonctionnent que si IsRunning est faux. Même si il n'y avait pas un problème avec la minuterie, vous avez besoin pour ce faire de toute façon parce que la minuterie peut ré-feu lors de l'exécution de votre si votre exécution prend plus de temps que votre intervalle de minuterie.
De toute façon, je pense toujours à l'aide de tâches planifiées est une solution faible et me donne des flashbacks de Windows 95.
Pour unique ou étroite applications exécuter sur une planification, l'exécution d'une application de console via le Planificateur de Tâches est presque toujours la bonne conception.
Pour long de l'exécution ou de l'exécution de tâches complexes qui peuvent avoir besoin d'interaction tels que manuel de démarrage, d'arrêt, de pause, continuer, etc. puis, en général, un Service Windows est la meilleure option.
Tâches planifiées peuvent être exécutés en vertu de tout compte et n'ont pas besoin d'un utilisateur connecté tout comme les Services. Pour unique but des tâches telles que celles que vous proposez contrôle externe de la tâche est généralement pas pertinent si vous n'avez pas besoin de la contrôlabilité d'un Service.
Un facteur important est aussi le Planificateur de Tâches est très robuste et souple à la manifestation en fonction de planificateur. Il est extrêmement peu probable que vous pourriez écrire un planificateur qui était plus robuste et peut gérer les aléas du temps et de déclenchement en fonction de la planification. En fait, il ya un certain nombre de questions sur l'utilisation de minuteries pour l'ordonnancement des tâches dans les services sur ce site et il est remarquable que le nombre de réponses (y compris certains de la "bonne " réponse") qui sont de mauvaise qualité ou carrément erronées.
EDIT: Il est aussi intéressant de noter que la stratégie de Microsoft est en train de glisser de l'utilisation des services pour des tâches de base des actions. Si vous cochez la case Vista, Win2K8 et Win7, vous remarquerez une liste de plus en plus de tâches planifiées que d'effectuer la maintenance du système et de nombreux services système.
Ayant eu à faire écrire, de débogage, de déployer et de soutenir à la fois, je préfère les Tâches Planifiées, et de loin. Je ne doute pas qu'il existe des cas d'utilisation les cas où cela serait un mauvais choix. Mais de toute relativement banale tâche d'une console, une application qui s'exécute comme une tâche de planification fonctionne très bien.
Dans mon expérience, les tâches planifiées sont extrêmement fiables. Je ne me souviens pas d'un seul échec et j'appui sur une demi-douzaine de différentes tâches planifiées exécuter n'importe où à partir de tous les jours à toutes les 15 minutes. (Pas qu'il n'y a pas eu d'échecs, mais ils étaient tous code ou config questions. Et ont été enregistrés et les notifications ont été envoyées. Le problème n'a JAMAIS été avec le groupe de Planification de l'infrastructure.)
Tâches du Planificateur de tâches peuvent s'exécuter en vertu de tout contexte de l'utilisateur et n'a besoin de personne pour être connecté.
Mon plus gros plus est en déploiement. Pour la console de apps, juste de publier le fichier EXE dans le bon dossier cible. Pour les services windows, vous devez arrêter le service (à l'aide de net.exe), désinstallez le service (à l'aide de InstallUtil.exe), attendre (j'ai le déploiement de sommeil pendant 25 secondes), de publier l'EXE, puis tout faire dans le sens inverse (installation, le démarrage).
Si je devais développer un service windows encore, je voudrais écrire comme une application console et ensuite trouver un moyen de l'envelopper dans un service de faciliter le débogage moins de mal de tête.
Que c'est un cas typique pour windows service, de l'OMI.
J'ai un certain nombre de tâches planifiées de windows qui exécute toutes les heures sur un serveur web de production. Ils ne sont pas fiables du tout. Ils sont en cours d'exécution dans Windows Server 2003 dans le cadre d'un compte d'ordinateur. La plupart du temps, ils fonctionnent parfaitement, mais parfois ils ne parviennent pas à exécuter et, parfois, ils se terminent avant qu'ils soient finis.
Cela peut être dû au fait qu'ils sont vbscripts et la façon dont ils sont écrits, mais j'ai vu des tâches planifiées avec WS FTP Pro (commercial logiciel FTP) qui se comportent de la même manière.
J'ai converti un grand nombre de ces services windows et n'ont jamais eu à se soucier d'eux à nouveau.
Je serais certainement se pencher vers les services windows. Comme certains des autres commentaires, j'ai été brûlé par les tâches planifiées de windows de trop nombreuses fois. Je ne leur fais pas confiance pour le niveau de l'entreprise des solutions.
Je recommanderais une tâche planifiée dans tous les cas, à l'exception des programmes qui en ont besoin pour fonctionner à des intervalles très courts, ou qui fonctionnent en continu. Les programmes qui démarrent, s'acquitter de leurs fonctions, et de l'arrêt ont bien défini les ressources de la durée de vie, effectuer la configuration et de nettoyage dans un délimitée certain nombre d'étapes (et si pas, le fait de ne pas mettre fin dans le délai prévu est l'indication d'un bug), et sont donc plus facile de raisonner sur. Et vous n'avez pas besoin de jouer avec des minuteries et des de ces.
Tâches planifiées ont des opérations équivalentes à l'arrêt et le redémarrage de commandes de services, c'est à dire. désactiver la tâche, activer les tâches. Simple, et il permet à toutes les opérations en cours en cours complète au lieu d'essayer d'avorter, ce qui est intrinsèquement corriger façon de gérer cela. Faites tous de cet état/transition de la gestion des ressources manuellement la durée de vie est tout simplement sujettes à l'erreur dans la présence de refactoring.
Je préfère service windows dans la plupart des cas.
Une bonne chose lorsque vous utilisez des tâches planifiées:
Toutes les ressources utilisées sont libérés lorsque la tâche planifiée avez terminé.
Lors de l'utilisation des services windows (sans arrêter le service), le processus ne meurt jamais. Et vous devez, dans votre programme, assurez-vous que les ressources sont libérées.