2011-01-07 2 views
0

У меня есть задача реализовать сервис с таким же поведением. Мой вопрос:Как работает служба индексирования Windows?

Как служба индексирования помнит, какие файлы уже были проиндексированы, а какие нет, какие файлы были изменены и их нужно переиндексировать?

Кроме того, я могу остановить эту услугу, а затем запустить ее через несколько дней, она продолжает работать. Имеет ли он свою собственную базу данных с информацией о файлах?

Спасибо

ответ

1

Обычно индексация обслуживание остается в фоновом режиме, используя WaitForSingleObject/WaitForMultipleObjects на ручках, созданных звонков FindFirstChangeNotification. Если вы хотите поддержать, что служба индексирования может быть отключена (или использоваться для уже существующего каталога), вы обязательно должны сохранить временную метку вашего последнего прогона индекса для каждого файла. Вы можете сравнить это с LastWriteTime данного файла.

EDIT: вы должны использовать ReadDirectoryChangesW и другой поток, который асинхронно индексирует файлы, чтобы не пропустить никаких изменений. Вы можете либо создавать новые потоки для каждого файла для индексации (дорого), либо использовать очередь заданий и фиксированное количество рабочих потоков (предпочтительно 1 или 2).

+0

Ok, thnx. кажется, после того, как служба Stop/Start повторно сканирует файловую систему и прочитает ее базу данных, чтобы проверить, что было изменено с момента последнего действия? – Oleg

+0

точно. просто перебирайте каждый файл в индексированном каталоге и его подкаталоги и проверяйте их LastWrittenTime на отметку времени в базе данных индексировщиков. – mschneider

+0

Btw, как это работает, если много файлов изменены, добавляется одновременно? возможно ли, что часть уведомлений может быть потеряна для службы? в этом случае он не знает, что индексы не являются актуальными ... – Oleg

Смежные вопросы