2011-08-17 2 views
1

Je suis un débutant dans C# .net et j'essaye d'obtenir un service de Windows fonctionne. J'ai suivi ce tutorielWindows Service lance une erreur

http://www.beansoftware.com/NET-Tutorials/Create-Windows-Services.aspx 

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.ServiceProcess; 
using System.Text; 
using System.IO; 

namespace WindowsService1 
{ 
    public partial class Service1 : ServiceBase 
    { 
     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 

     } 


     protected override void OnStop() 
     { 
     } 
     private void FolderWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e) 
     { 
      TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true); 
      writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been created. "); 
      writer.Close(); 
     } 

     private void FolderWatcherTest_Deleted(object sender, System.IO.FileSystemEventArgs e) 
     { 
      TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true); 
      writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been deleted. "); 
      writer.Close(); 
     } 

     private void FolderWatcherTest_Renamed(object sender, System.IO.RenamedEventArgs e) 
     { 
      TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true); 
      writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been renamed. "); 
      writer.Close(); 
     } 

    } 
} 

J'ai été en mesure d'obtenir le service enregistré dans le service Windows. Mais quand j'essaie de le démarrer, il me donne une erreur 2: Le système ne peut pas trouver le fichier spécifié

Je ne suis pas sûr de ce qui se passe. Aussi je suis un peu confus où ces méthodes sont appelées comme tutoriel na pas faire référence à ces méthodes

private void FolderWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e) 
     { 
      TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true); 
      writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been created. "); 
      writer.Close(); 
     } 

     private void FolderWatcherTest_Deleted(object sender, System.IO.FileSystemEventArgs e) 
     { 
      TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true); 
      writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been deleted. "); 
      writer.Close(); 
     } 

     private void FolderWatcherTest_Renamed(object sender, System.IO.RenamedEventArgs e) 
     { 
      TextWriter writer = new StreamWriter("C:\\FolderLog.txt", true); 
      writer.WriteLine(DateTime.Now + " A new folder/file with name " + e.Name + " has been renamed. "); 
      writer.Close(); 
     } 

Merci pour votre aide

Update1

ok j'ai pu enregistrer le un service. Je courais le .exe pour installer en tant que service à partir d'un dossier différent où les fichiers de projet étaient. Mais maintenant, il s'enregistre bien. Cependant, je ne suis pas en mesure de déclencher ces méthodes privées FolderWatcherTest_ * . Ils sont censés enregistrer les modifications lorsque je change le nom du fichier sur le bureau. Toute aide sera appréciée

grâce

+0

Je viens d'écrire un service Windows, et j'ai trouvé que l'ajout de 'Debugger.Break();' était une aubaine. Cette ligne fera apparaître VS afin que vous puissiez le déboguer. – Iain

+0

@lian: Le service Windows peut être débogué comme le programme normal. –

Répondre

2

Vous devez d'abord vous assurer que votre service peut démarrer. Commentez temporairement le code d'observateur de fichier jusqu'à ce que vous puissiez démarrer le service. Essayez de réinstaller votre service Windows avec InstallUtil. Cet utilitaire est généralement situé ici (Windows 7):

c:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe 

Exécutez cette commande d'abord, il désinstalle le service:

installutil /u yourproject.exe 

Le service devrait disparaître de la liste des services enregistrés. Si cela ne fonctionne pas, vous pouvez utiliser la commande sc delete pour faire la même chose. Après avoir supprimé le service, trouvez où vous êtes. Il est généralement situé dans les dossiers \bin\Debug\yourproject.exe ou \bin\Release\yourproject.exe sous votre répertoire de projet. Exécutez cette commande pour enregistrer ce exe comme service Windows: «La phase de validation terminée avec succès »

installutil yourproject.exe 

Il devrait y avoir aucune erreur et il faut dire

Regardez ce tutorial.

+0

s'il vous plaît regardez la mise à jour1 de la question – Autolycus

+0

@Autolycus: vous n'avez pas d'instance d'observateur de fichiers. Personne n'appelle ces méthodes. À partir de votre didacticiel: Étape 6: Ouvrez service1.cs en mode Création et, à partir de Toolbox, sélectionnez le contrôle FileSystemWatcher et définissez sa propriété name sur FolderWatcher. Étape 7: Accédez aux propriétés du contrôle FileSystemWatcher et indiquez le chemin du dossier qui doit être surveillé. Vous pouvez également définir ce chemin dans le fichier app.config de votre projet et spécifier ce chemin app.config dans l'événement OnStart de votre service. http://midnightcubicle.wordpress.com/2011/04/25/creating-windows-service-in-c/ – Dmitry

1

La méthode onStart devrait avoir une certaine logique pour déclencher ces événements que vous avez souscrites via FileSystemWatcher.

Avez-vous d'abord ces fichiers txt dans le lecteur/répertoire spécifié?

Voir également le visualiseur d'événements sous le panneau de configuration pour toute erreur de service.

+0

s'il vous plaît regardez la mise à jour1 dans la question – Autolycus

+0

J'ai les fichiers dans le répertoire spécifié. Je ne suis pas sûr de ce que je peux faire pour déclencher les événements – Autolycus

+0

Où est le code dans lequel vous reliez les événements avec le composant filesystemwatcher? Plus simplement brancher l'événement, regardez également ici comme une référence http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx – Zenwalker

1

Lorsque vous installez un service de fenêtres que vous avez une possibilité d'exécuter sur un

  1. compte système local
  2. compte de service

Si vous utilisez sur le compte de service que vous devez donner l'autorisation au compte de service sur ce dossier.

Veuillez vérifier le compte sur lequel vous êtes en cours d'exécution.

+0

Mais est-ce que cela cause le fichier non trouvé xception? – Zenwalker

+0

oui cela peut également causer le problème.Si le compte n'a pas la permission d'afficher le fichier, il donnera cette erreur. –

+0

Je pense que votre droit, puisque la méthode onstart n'a aucune logique pour le service à faire et plus pour commencer son erreur de lancement, je suppose que la xception n'est pas lancée par des événements mais plutôt par le système pour ne pas avoir la permission. Voyons voir ce que OP a à dire. – Zenwalker

Questions connexes