Я недавно создал что-то, что почти точно то, что вы описываете. Сначала я подумал, что мне следует использовать FileSystemWatcher. Проблема в том, что он только уведомил меня о том, что произошло. Если служба не работала и должна была быть перезапущена по какой-либо причине, при запуске она не запускала никаких событий, связанных с файлами, которые были созданы, когда служба не работала.
Итак, я начал писать собственный опросчик, который проверял бы файлы при запуске службы, а затем использовал FileSystemWatcher. Затем я начал думать, зачем вообще возиться с FileSystemWatcher и иметь 2 кода для обслуживания? Таким образом, я полностью отбросил его и просто сделал так, чтобы мой поллер делал все это, поскольку приложение просто должно делать то, что поллер делал при запуске снова и снова.
Мое приложение - это служба Windows. OnStart создает поток, который выполняет функцию для опроса. Эта функция является просто циклом while с конечным условием, запускаемым OnStop, и она просто опрашивает каждую минуту и просматривает каталог. Если он находит что-то, он имеет дело с этим, если нет, он спит в течение 1 минуты. Довольно просто Код является базовым и простым в обслуживании.
Вот пример моего OnStart:
protected override void OnStart(string[] args)
{
WriteToLog("Starting...");
bThreadRun_m = true;
tMain_m = new Thread(new ThreadStart(RunThread));
tMain_m.Name = "Main Thread";
tMain_m.Start();
WriteToLog("Start Complete");
}