Question

J'ai un service Windows que je veux exécuter périodiquement un programme externe. Je fais actuellement ce la manière habituelle

Process program = Process.Start(@"C:\mpewatch\db_parameters\DBParameters.exe");

Cela ne semble pas fonctionner. Je l'exécution de ce à partir d'un thread séparé qui est lancé dans mon service de gestionnaire d'OnStart. Y at-il problème conceptuel avec cela? Est-il pas possible d'exécuter des programmes externes d'un service comme celui-ci?

Était-ce utile?

La solution

Votre question n'a pas indiqué le système d'exploitation.

Sous Windows XP, vous pouvez configurer votre service Windows pour interagir avec le bureau en ouvrant le panneau de commande de service, double-cliquez sur votre service, en sélectionnant l'onglet Connexion, la configuration du service afin de fonctionner en tant que système local, et en cochant la case à cocher . Il est assez simple. Vous pouvez essayer des tests avec quelque chose comme Notepad.exe juste pour voir si vous pouvez le faire fonctionner.

Sur Vista (et probablement Windows 7), cependant, vous pouvez être hors de la chance. J'ai lu que la possibilité pour les services Windows d'interagir avec le bureau a été supprimé dans Vista. J'oublie ce que la terminologie est, mais essentiellement des services courrai dans « shell 0 », tandis que les utilisateurs occuperont « shell 1 ». Les applications utilisateur seront en mesure de communiquer avec les services et vice-versa grâce à la technologie comme WCF, mais les services ne seront pas en mesure de communiquer directement avec le bureau. Par exemple, les boîtes d'erreur qui apparaissent devront être traitées en échangeant de « shell 0. » Encore une fois, cela est basé sur quelque chose que j'ai lu il y a quelques mois, et je ne suis pas allé regarder à nouveau. Pour moi, j'ai structuré mon service Windows pour être configuré à l'aide WCF via une application front-end.

Je suis désolé, je n'ai pas un lien pour vous, mais si votre service finira par migrer vers une version plus récente OS (ou si vous êtes déjà là), c'est quelque chose à vérifier.

Autres conseils

peut exécuter des programmes externes d'un service, mais il y a des problèmes de sécurité. Par exemple, votre service peut être en cours d'exécution sous un compte qui n'ont pas lu l'accès au dossier dans lequel le programme externe réside, même si votre compte interactif fait avoir cet accès.

Pour des fins de test, essayez de configurer le service pour fonctionner sous votre compte interactif. Si le programme est invoqué comme prévu, le problème avec le compte d'origine est qu'il ne dispose pas des privilèges suffisants pour exécuter le programme.

Une autre considération critique avec les services Windows est qu'il n'y a pas d'interface graphique. Techniquement, il y a une option pour permettre au service d'interagir avec une interface graphique locale, mais vous ne le verra pas. Cela est dû à des services en cours d'exécution en tant qu'utilisateur système local.

Dans un service, une boîte de dialogue modale (OK, Annuler, etc.) est considéré comme une erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top