Как работает служба индексирования Windows?

У меня есть задача реализовать сервис с таким поведением. Мой вопрос:

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

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

Спасибо


person ZedZip    schedule 07.01.2011    source источник


Ответы (1)


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

РЕДАКТИРОВАТЬ: вы должны использовать ReadDirectoryChangesW и другой поток, который асинхронно индексирует файлы, чтобы не пропустить никаких изменений. Вы можете либо создавать новые потоки для каждого файла для индексации (дорого), либо использовать очередь заданий и фиксированное количество рабочих потоков (предпочтительно 1 или 2)

person mschneider    schedule 07.01.2011
comment
Хорошо, спасибо. кажется, после того, как служба Stop / Start повторно сканирует файловую систему и читает ее базу данных, чтобы проверить, что изменилось с момента последней активности? - person ZedZip; 07.01.2011
comment
в яблочко. просто переберите каждый файл в проиндексированном каталоге и его подкаталогах и проверьте их LastWrittenTime по отметке времени в базе данных индексаторов. - person mschneider; 07.01.2011
comment
Кстати, как это работает, если много файлов изменено, добавлено одновременно? возможно ли, что часть уведомлений может быть потеряна для службы? в этом случае он не знает, что индексы не актуальны... - person ZedZip; 07.01.2011
comment
Вы можете обрабатывать уведомления об изменениях, помещая имена файлов в потокобезопасную очередь заданий, которая обрабатывается асинхронно. Так что вы можете начать ждать следующего изменения как можно скорее. - person mschneider; 07.01.2011