2012-08-17 19 views
8

Ich muss ein Programm erstellen, das Änderungen in der Dateigröße überwacht. Ich habe bereits einen einfachen Windows-Dienst und Dateisystemwächter gemacht, so dass ich jetzt mit dem Konzept vertraut bin. Ich habe auch einen Code erstellt, der nach der Dateigröße sucht (in einer Formularschaltfläche), aber noch nicht in meinem Dateisystemwächter implementiert wurde. Wie erstelle ich einen Windows-Dienst mit einem Dateiwächter, der die Dateigröße überwacht? Muss ich einen Dateisystemwächter in den Windows-Dienst einfügen und den Watcher über die OnStart-Methode aufrufen?Windows-Dienst w/FileSystemWatcher in C#

Antwort

14

Wenn Sie einen Windows-Dienst erstellen, sollten Sie dies programmgesteuert tun. Normalerweise behalte ich Formulare aus meinen Diensten heraus und mache eine separate Schnittstelle, damit sie kommunizieren können. Jetzt muss der FileSystemWatcher kein Ereignis mehr nur auf seine Größe überwachen. Daher sollten Sie eine Methode erstellen, die mit FileSystemWatcher.Changed verknüpft ist, um nach Änderungen an vorhandenen Dateien zu suchen. Deklarieren und initialisieren Sie das Steuerelement in Ihrer OnStart-Methode und binden Sie die Ereignisse ebenfalls zusammen. Führen Sie in Ihrer OnStop-Methode Bereinigungscode aus. Es sollte wie folgt aussehen:

protected override void OnStart(string[] args) 
{ 
FileSystemWatcher Watcher = new FileSystemWatcher("PATH HERE"); 
Watcher.EnableRaisingEvents = true; 
Watcher.Changed += new FileSystemEventHandler(Watcher_Changed); 
} 

// This event is raised when a file is changed 
private void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
// your code here 
} 

Beachten Sie auch, die Filesystemwatcher wird mehrere Ereignisse für eine einzelne Datei abfeuern, so dass, wenn Sie Uhr debuggen für Muster um ihn zu arbeiten.

+0

Also ich sollte keine Gegenstände aus der Toolbox in den Service-Fenstern hinzufügen .. Danke! Ich werde es so schnell wie möglich versuchen .. Das war wirklich hilfreich –

+0

Ich würde davon weg bleiben. Wenn Sie einen Dienst ausführen, deaktiviert Windows die Formularintegration natürlich und Sie müssen den Dienst nach der Installation konfigurieren, um es zuzulassen. Wenn es etwas ist, was nur deine Augen sehen, dann ist es wahrscheinlich keine große Sache, aber es ist eine gute Angewohnheit, diesen Stil der Entwicklung zu vermeiden (auch aus Sicherheitsgründen). –

+1

AKTUALISIERUNG: In Windows Vista und Windows 7 wurde die Option zum Zulassen der Desktop-Interaktion vollständig entfernt. Habe das bei der Veröffentlichung nicht bemerkt. –

3

Sie können einfach Ihre Filesystemwatcher-Objekt in der Methode OnStart ermöglichen durch

EnableRaisingEvents = true; 

Dann behandeln Sie das Ereignis einstellen. Das sollte es tun.

+0

Standardwert wäre wahr – Peru

+1

Vielleicht. [MSDN] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.enableraisingvents.aspx) - "true, wenn die Komponente aktiviert ist; andernfalls false. Der Standardwert ist false. Wenn Sie Wenn Sie die Komponente in Visual Studio 2005 für einen Designer verwenden, ist der Standardwert wahr. " –

1

können Sie einen Delegaten zu handhaben, was wie

myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed); 

private void FSWatcherTest_Changed(object sender, 
       System.IO.FileSystemEventArgs e) 
{ 
    //code here for newly changed file or directory 
} 

Und so weiter

ich Sie diesen Artikel lesen http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv

Auch haben diese Delegierten on_start in Windows-Dienst würde empfehlen, sich geändert hat