Я написал службу Windows (с использованием Visual Studio 2010 Premium, C #, .NET 4) для мониторинга папки.Все, что он делает, это обнаруживает, когда в папку вносятся изменения (добавляется файл / папка, что-то удаляется и т. Д.), И записывает обнаружение в текстовый файл.Не журнал событий, а обычный файл .txt.
Теперь он отлично устанавливается (я полагаю) и обнаруживается в Управлении компьютером и позволяет мне его запускать.Он должен написать «Мониторинг запущен» в файл - но это не так.Затем, когда я пытаюсь остановить службу, она выдает мне следующую ошибку:
"Windows не может остановить службу FileMonitoring на локальном компьютере. Служба не возвращает ошибку. Это может быть внутренняя Windowsошибка или внутренняя ошибка обслуживания. Если проблема не устранена, обратитесь к системному администратору. "
И не останавливается.Затем, когда я пытаюсь остановить его снова, я получаю эту ошибку:
«Windows не удалось остановить службу FileMonitoring на локальном компьютере. Ошибка 1061: в данный момент служба не может принимать управляющие сообщения».
А затем он останавливается.
Кто-нибудь знает, как решить эту проблему?Перед этим сервисом я просто создал простой сервис, который записывал в файл .txt «Запущен», когда сервис запущен, и «Остановлен», когда сервис остановлен, и он работал отлично.Все, что добавлено в это - это использование FileSystemWatcher
.
Любая помощь будет принята с благодарностью, и я дам любую информацию / фрагменты кода, которые вам нужны, просто спросите.
Спасибо взаранее!
РЕДАКТИРОВАТЬ:
Вот код для вас:
protected override void OnStart(string[] args)
{
watcher = new FileSystemWatcher();
watcher.Path = @"C:\temp\services\Watched";
watcher.Changed += new FileSystemEventHandler(LogFileSystemChanges);
watcher.Created += new FileSystemEventHandler(LogFileSystemChanges);
watcher.Deleted += new FileSystemEventHandler(LogFileSystemChanges);
watcher.Renamed += new RenamedEventHandler(LogFileSystemRenaming);
watcher.Error += new ErrorEventHandler(LogBufferError);
watcher.EnableRaisingEvents = true;
LogEntry("Monitoring Started.");
}
protected override void OnStop()
{
watcher.EnableRaisingEvents = false;
watcher.Dispose();
LogEntry("Monitoring Stopped.");
}
void LogEntry(string message)
{
counter++;
FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(counter + ". " + message);
fs.Close();
sw.Close();
}
РЕДАКТИРОВАТЬ 2:
Хорошо, кто-то заметил тот факт, что я не закрыл свои потоки.Глупый, глупый я.После этого я запустил службу и не получил ту же ошибку, я получил такую:
"Служба FileMonitoring на локальном компьютере запускалась и затем останавливалась. Некоторые службы автоматически останавливаются, если онине используются другими службами или программами. "
Это кажется намного проще, но я все еще в растерянности.Есть идеи?
Большое спасибо!