파일 크기의 변화를 모니터링하는 프로그램을 만들어야합니다. 나는 간단한 윈도우 서비스와 파일 시스템 워처를 만들었으므로 지금은 익숙하다. 또한 파일 크기를 확인하는 코드를 만들었지 만 아직 파일 시스템 워처에 구현하지 않았습니다. 파일 크기를 모니터링하는 파일 감시자가있는 Windows 서비스를 만들려면 어떻게해야합니까? Windows 서비스 내에 파일 시스템 워처를 넣고 OnStart 메서드를 통해 감시자를 호출해야합니까?C#의 FileSystemWatcher를 사용하는 Windows 서비스
답변
Window 서비스를 만드는 경우 프로그래밍 방식으로 처리하는 것이 좋습니다. 나는 보통 내 서비스에서 양식을 지우고 의사 소통 할 수있는 별도의 인터페이스를 만듭니다. 이제 FileSystemWatcher에는 크기 만보기위한 이벤트가 없으므로 FileSystemWatcher.Changed와 연결된 메서드를 만들어 기존 파일에 대한 수정을 확인하려고합니다. OnStart 메서드에서 컨트롤을 선언하고 초기화하고 함께 이벤트를 묶습니다. OnStop 메소드에서 정리 코드를 수행하십시오. 그것은 다음과 비슷한 모습이 될 것입니다
또한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
}
유의하십시오은 FileSystemWatcher는 하나의 파일에 대해 여러 이벤트를 해고 것, 패턴이 그것을 해결하기 위해 당신이 시계를 디버깅하고 그렇게 할 때.
당신은 단순히
EnableRaisingEvents = true;
그런 다음 이벤트를 처리 설정하여 ONSTART 방법에 FileSystemWatcher 구성 개체를 활성화 할 수 있습니다. 그렇게해야합니다.
기본값은 true 일 것입니다 – Peru
아마도. [MSDN] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.enableraisingevents.aspx) - "구성 요소가 활성화되어 있으면 true이고, 그렇지 않으면 false이며, 기본값은 false입니다. Visual Studio 2005에서 디자이너의 구성 요소를 사용하는 경우 기본값은 true입니다. " –
당신은 Windows 서비스에서이 위임 on_start
이이 문서 또한 http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv
을 읽을 수
myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed);
private void FSWatcherTest_Changed(object sender,
System.IO.FileSystemEventArgs e)
{
//code here for newly changed file or directory
}
그래서
에 내가 당신을 추천 할 것 같은 변경 사항을 처리 할 수있는 대리자를 만들 수 있습니다
그래서 서비스 창에서 도구 상자의 항목을 추가해서는 안됩니다. 감사합니다! 나는 그것을 급히 시도 할 것이다. 그것은 정말로 도움이되었다. –
나는 그것에서 떨어져있을 것이다. 서비스를 실행 중일 때 Windows는 자연스럽게 양식 통합을 비활성화하고이를 허용하도록 설치 후 서비스를 구성해야합니다. 눈에만 보이는 것이라면 큰 문제는 아니지만 (보안상의 이유로) 개발 스타일을 피하는 것이 좋은 습관입니다. –
업데이트 : Windows Vista 및 Windows 7에서는 데스크톱 상호 작용을 허용하는 옵션이 완전히 제거되었습니다. 게시 시간에 이것을 깨닫지 못했습니다. –