2010-09-21 3 views
1

J'ai créé un service Windows qui surveille un répertoire à l'aide de FileSystemWatcher et lorsqu'un fichier est placé dans le dossier, il le zippe.Le service Windows fonctionne lors des tests mais pas en tant que service

Toutes les fonctionnalités sont dans une classe que j'ai créée nommée FileProcessor.

Lorsque je crée une application console qui utilise FileProcessor, le zipping automatisé fonctionne très bien. Cependant, quand je cours la classe dans le service de Windows il ne fonctionne jamais.

+5

Avez-vous essayé de déboguer votre service? "Ça ne marche jamais" est un peu nébuleux. IIRC, en plaçant la ligne Debugger.Break() au bon endroit fonctionne un régal pour la version de débogage. – spender

+1

Je suis d'accord avec spender, et je peux confirmer que 'FileSystemWatcher' fonctionne très bien à partir d'un service, lors de l'exécution sur un compte qui a des droits d'administrateur local (et en regardant les répertoires locaux). –

Répondre

3

Vérifiez le compte et le répertoire sous lesquels votre service s'exécute - at-il l'autorisation et la visibilité du répertoire cible?

Ajouter des diagnostics à la classe afin que vous puissiez voir ce qu'il essaie de faire, et des informations d'erreur de sortie (vous gérez toutes les éventuelles erreurs du système d'exploitation sous FileSystemWatcher, non?). Vous en aurez besoin quand le service sera en ligne. Comparez la sortie lors de l'exécution en tant que service par rapport au test.

Ajoutez un System.Threading.Thread.Sleep(15000) à votre classe afin que, lorsqu'il est appelé par votre service, vous ayez le temps d'attacher le débogueur pour déterminer ce qui se passe. Essayez de déboguer votre service en tant que spender said - run service.

+0

+1 pour le bon vieux Thread.Sleep ([many seconds]) astuce. Encore mieux quand, une fois que vous avez réglé le problème, vous libérez le bugger avec cela et ne trouvez jamais le temps de le sortir à nouveau! –

+0

@Andras Zoltan - En général, je ne mettre cela en pour Debug pour prévenir l'embarras –

+0

Sinon, vous pouvez avoir exécuter 'Debugger.Break' (http://msdn.microsoft.com/en-us/library/system.diagnostics .debugger.break.aspx), qui vous invitera à vous y attacher. Vous devez également vous assurer qu'il est autorisé à interagir avec le bureau. –

5

Semble à moi comme les autorisations de fichiers pourraient être vous visser. Dans quel compte le service fonctionne-t-il?

0

Mettez un point de débogage à la place dans le code pour vérifier. Appuyez sur Ctrl + Alt + P dans Visual Studio cela vous donnera l'écran de processus attach. Archiver - Afficher les processus dans tous les utilisateurs ET Afficher les processus dans toutes les sessions - Case à cocher. Essayez de trouver votre service - processus disponibles liste et cliquez sur « Joindre »

maintenant mettre un fichier dans le dossier et le débogueur vous amène à VS au point d'arrêt et essayer de le déboguer je suis sûr que vous trouverez ce que le problème est.

Questions connexes