У меня есть объект FileSystemWatcher в службе Windows. Я написал его в консольном приложении, используя это приложение в качестве заглушки для моего компонента.FileSystemWatcher OnError не работает из службы Windows
Мой компонент создает экземпляр FileSystemWatcher и настраивает просмотр подключенного диска. Это отлично работает для меня как из тестового заглушки Console App, так и для развертываемой службы Windows.
Я также событие OnError зацепил с log4net регистрацией фатальной ошибки уровня:
public FileSystemWatcher CreateFileWatcher()
{
FileSystemWatcher watcher = new FileSystemWatcher();
try
{
log.Info("Configuring DPIFileWatcher");
watcher.Filter = "*.xml";
log.Info("DPIFileWatcher Filter set to: *.xml");
string watcherPath = ConfigurationManager.AppSettings["InoundPath"].ToString();
watcher.Path = watcherPath;
log.Info(String.Format("DPIFileWatcher Path set to: {0}", watcherPath));
watcher.Created += new FileSystemEventHandler(DPIWatcher_FileCreated);
watcher.Changed += new FileSystemEventHandler(DPIWatcher_FileChanged);
watcher.Error += new ErrorEventHandler(DPIWatcher_Error);
watcher.EnableRaisingEvents = true;
log.Info("DPIFileWatcher Configuration Successful.");
}
catch(Exception e)
{
log.Fatal(String.Format("Failed to configure DPIFileWatcher: {0}", e.Message));
}
return watcher;
}
Вот мое событие ошибки:
private void DPIWatcher_Error(object source, ErrorEventArgs e)
{
log.Fatal(String.Format("FileWatacher error: {0}", e.GetException().Message));
}
Если я испытываю к потере ошибки сети, вынув сетевая карта, я получаю следующую ошибку журнала из моего консольного приложения:
FATAL [ 12] 2013-02-12 12:14:02,142 SMILLER-E6430 METHOD: DPIWatcher_Error GenFileWatch.DPIFileWatcher- FileWatacher error: The specified network name is no longer available (C:\Development\GenFileWatch\GenFileWatch\DPIFileWatcher.cs: 447)
Но thi s ошибка журнала не будет работать при запуске из службы Windows.
Кто-нибудь знает, почему и как исправить?
Записывает ли что-нибудь? – BNL
Вы создаете экземпляр FileSystemWatcher из 'OnStart'? Что вы делаете со ссылкой после того, как создали ее? Он может быть собран преждевременно, поэтому событие никогда не срабатывает. Впрочем, догадка. –