2012-08-17 33 views
8

Dosya boyutunda değişiklikleri izleyen bir program oluşturmalıyım. Ben zaten basit bir windows hizmeti ve dosya sistemi gözlemcisi yaptım, bu yüzden şimdi tanıdık bir kavram. Ayrıca, dosya sistemlerini (form düğmesinde yapmış) kontrol eden ancak dosya sistemimdeki uygulanmayan bir kod da yaptım. Dosya boyutunu izleyen bir filewatcher olan bir windows servisi nasıl oluşturabilirim? Windows hizmetinin içine bir dosya sistemi saati koymak ve izleyiciyi OnStart yöntemi ile çağırmak zorunda mıyım?Windows Service için C/FileSystemWatcher içinde C#

cevap

14

Bir Windows hizmeti veriyorsanız, program aracılığıyla bunu yapmak isteyeceksiniz. Genellikle formları hizmetlerimden uzak tutar ve iletişim kurmaları için ayrı bir arayüz oluşturur. Şimdi FileSystemWatcher sadece boyut için izlemek için bir olay yok, bu yüzden var olan dosyalarda değişiklik kontrol etmek için FileSystemWatcher.Changed ile bağlanan bir yöntem yapmak isteyeceksiniz. OnStart yönteminizdeki kontrolü bildirin ve başlatın ve olayları da bir araya getirin. OnStop yönteminizde herhangi bir temizleme kodu yapın. Bu gibi görünmelidir:

Ayrıca
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 
} 

dikkat FileSystemWatcher tek bir dosya için birden fazla etkinlik ateşlenmesine, desen etrafında çalışmak için lütfen saati ayıklama ediyoruz böylece zaman.

+0

Bu yüzden araç penceresinden servis pencerelerine herhangi bir öğe eklememeliyim. En kısa zamanda deneyeceğim .. Bu gerçekten yararlı oldu –

+0

Ben ondan uzak kalmak istiyorum. Bir hizmeti çalıştırdığınızda, Windows form bütünleştirmesini doğal olarak devre dışı bırakır ve yüklemeden sonra hizmeti yapılandırmak için yapılandırmanız gerekir. Eğer sadece gözlerin gördüğü bir şeyse, o zaman muhtemelen büyük bir anlaşma değildir, ama bu gelişim tarzından kaçınmak iyi bir alışkanlıktır (güvenlik nedenleriyle). –

+1

GÜNCELLEME: Windows Vista ve Win 7'de, masaüstü etkileşimine izin verme seçeneği tamamen kaldırıldı. Bunu yükleme zamanında fark etmedi. –

3

Sadece

EnableRaisingEvents = true; 

Ardından olay işlemek ayarlayarak OnStart stilini FileSystemWatcher nesnesini etkinleştirebilirsiniz. Bu yapmalı.

+0

varsayılan değeri – Peru

+1

olabilir. [MSDN] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.enableraisingevents.aspx) - "bileşen etkinse true, aksi halde, false. Varsayılan değer yanlıştır. Visual Studio 2005'te bir tasarımcının bileşenini kullanıyor, varsayılan doğru. " –

1

Eğer windows hizmetinde bu temsilci on_start sahip bu yazıyı Ayrıca http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv

okumak için

myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed); 

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

Ve böylece

üzerinde sana öneriyoruz gibi nelerin değiştiğini işlemek için bir temsilci oluşturabilir

İlgili konular