Windows 7: застряла поисковая индексация


13

Когда я открываю Параметры индексирования, он говорит:

Проиндексировано 4 317 объектов   Идет индексация. Результаты поиска могут быть неполными в течение этого времени.

Это застряло на 4317, хотя; больше элементов не было проиндексировано. Хуже всего то, что SearchIndexer.exe занимает 100% ЦП (ну, 50%, но у меня двухъядерный ЦП; он потребляет всю вычислительную мощность, какую только может). Это не вызывает активность жесткого диска, хотя.

Я попытался нажать «Устранить неполадки поиска и индексации» в нижней части окна «Параметры индексации», но не смог найти никаких проблем.

Я также попытался восстановить раздел реестра, который предлагают несколько веб-сайтов; Я изменяю HKLM \ SOFTWARE \ Microsoft \ Windows Search SetupCompletedSuccessful на 0 и перезагружаю компьютер, и он, по-видимому, восстанавливается, потому что переходит на 1, но та же проблема продолжает возникать.

Это сокращает время автономной работы моего ноутбука и делает его очень горячим, чтобы мои вентиляторы работали постоянно. Мне пришлось отключить службу поиска Windows. Как я могу это исправить? Нужно ли мне просто переформатировать мой компьютер?


Обновить:
Я пытался восстановить пару раз. Там нет ничего необычного в местах, которые я должен индексировать, и у меня нет ни одной загрузки или что-то подобное. Я не вижу причин, по которым он остановился, и заметил это слишком поздно для восстановления системы. На данный момент, я надеюсь, что кто-то предложит какой-нибудь секретный ответ, который решит проблему, таким образом, щедрость.


Еще одно обновление:
Я попытался запустить службу снова, просто чтобы попробовать еще раз. Сначала казалось, что все в порядке (параметры индексирования показали, что он работает на пониженной скорости из-за активности пользователей, а количество файлов увеличивается). Через некоторое время я проверил, и сервис остановился. Просмотрщик событий выявил некоторые ошибки, подобные этой:

Log Name:      Application
Source:        Application Error
Date:          2/1/2010 7:34:23 PM
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      ricky-win7
Description:
Faulting application name: SearchIndexer.exe, version: 7.0.7600.16385, time stamp: 0x4a5bcdd0
Faulting module name: NLSData0007.dll, version: 6.1.7600.16385, time stamp: 0x4a5bda88
Exception code: 0xc0000005
Fault offset: 0x002141ba
Faulting process id: 0x13a0
Faulting application start time: 0x01caa39f2a70ec02
Faulting application path: C:\Windows\system32\SearchIndexer.exe
Faulting module path: C:\Windows\System32\NLSData0007.dll
Report Id: b4f7a7ae-0f92-11df-87fc-e5d65d8794c2
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2010-02-02T00:34:23.000000000Z" />
    <EventRecordID>10689</EventRecordID>
    <Channel>Application</Channel>
    <Computer>ricky-win7</Computer>
    <Security />
  </System>
  <EventData>
    <Data>SearchIndexer.exe</Data>
    <Data>7.0.7600.16385</Data>
    <Data>4a5bcdd0</Data>
    <Data>NLSData0007.dll</Data>
    <Data>6.1.7600.16385</Data>
    <Data>4a5bda88</Data>
    <Data>c0000005</Data>
    <Data>002141ba</Data>
    <Data>13a0</Data>
    <Data>01caa39f2a70ec02</Data>
    <Data>C:\Windows\system32\SearchIndexer.exe</Data>
    <Data>C:\Windows\System32\NLSData0007.dll</Data>
    <Data>b4f7a7ae-0f92-11df-87fc-e5d65d8794c2</Data>
  </EventData>
</Event>

Если у вас возникла та же ошибка и вы пришли сюда из поиска Google, пожалуйста, прокомментируйте или добавьте ответ с подробным описанием вашего прогресса в этом, если таковой имеется ...


4
Кстати ... Кто-нибудь знает способ выяснить, что это за волшебный 4 317-й предмет? Я хотел бы знать, есть ли только один искаженный файл, блокирующий всю систему.
Ricket

Вы можете открыть файл Windows.edb, используя файл с именем ESEDatabaseView здесь: nirsoft.net/utils/ese_database_view.html
user2924019

Ответы:


8

Я думаю, что вы можете быть правы, когда говорите, что поврежденный файл приводит к зависанию. Грубый способ определить файл - перейти на вкладку «Файлы» и отключить половину типов файлов от индексации. Пусть работает. Либо он завершается, либо останавливается. Если это останавливается, выключите половину снова. Если он завершается, вы знаете, что неверный тип файла находится в другой половине. Это должно позволить вам определить неверный тип файла.

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

Другая идея - позволить поиску зависнуть на 4 317-м файле. Затем запустите командную строку. Тип

CD c:\
DIR /s /TA /O-D >c:\newt.txt

Это создаст файл с именем newt.txt, в котором будут храниться все файлы и время последнего обращения к ним. Доступ, означающий чтение, не измененный. Вам придется искать файл с помощью файлового редактора, но искать последние несколько файлов, которые были изменены. Если нам повезет, ваш плохой файл будет там. Удачи!


Хороший совет (вторая идея). Разве индексатор не хранит какой-то журнал файлов, проиндексированных где-нибудь? Это может позволить нам увидеть последний файл, успешно проиндексированный, и, возможно, получить подсказку таким образом.
mtone

@mtone - можно ли индексировать по одной папке за раз? Это сузит поиск.
Nifle

@Nifle - да, было бы разумно провести расследование, чтобы уменьшить количество проиндексированных папок. Под меню «Пуск» введите «indexing» и нажмите на параметры индексации. На этой панели перечислены места, которые вы индексируете.
Knox

@ Нокс +1 за первую идею. Вы предлагаете исключение [Двоичный] поиск. И если вы модифицируете его, понимая вероятность дефекта, и сначала ограничиваете индексирование, то вы можете получить много лучше чем O (log2 N) ускорив.
ElderDelp

4

Я нашел эту информацию на Форумы Technet

Кажется, это известная ошибка:

  1. ПК имеет два (или несколько) дисков или разделов

  2. Профили пользователей и Windows расположены на первом диске или   раздел (предположим, буква диска C :)

  3. Второй диск или раздел имеет больше свободного дискового пространства, чем   сначала (предположим, буква диска D :)

  4. Последовательность задач обновления OSD ConfigMgr 2007, использующая USMT 4 с   на ПК запускается жесткая ссылка   Захват файлов пользователя и   Настройки "/" Захватить состояние пользователя "   удастся, но «Восстановить пользователя   Состояние "/" Восстановление файлов пользователя и   Настройки "не удастся.

разрешение

Чтобы решить проблему, переменная   OSDStateStorePath должен быть изменен   от его значения по умолчанию. При использовании MDT   Интеграция 2010 / MDT 2010 с обновлением 1,   переменная должна быть переопределена после   это было установлено   Скрипт ztiuserstate.wsf в   «Определить локальное или удаленное пользовательское состояние»   задача.

Чтобы гарантировать, что государственный магазин   сохраняется на тот же диск / раздел   где установлена ​​Windows и   профили пользователей расположены,   переменная окружения SystemDrive может   использоваться как часть пути, который   определяет переменную   OSDStateStorePath.

Если MDT 2010 / MDT 2010 Обновление 1   интеграция не используется ,   Задача «Задать переменную последовательности задач», которая   устанавливает переменную OSDStateStorePath   необходимо изменить:

  1. В консоли администратора ConfigMgr 2007 перейдите к Computer Management - & GT; Operating System Deployment - & GT; Task Sequences узел.

  2. Щелкните правой кнопкой мыши по последовательности задач и выберите «Изменить».

  3. Нажми на Set Local State Location задача. Убедитесь, что задача   это Set Task Sequence Variable задача   который устанавливает переменную OSDStateStorePath,

Сразу после Value: текстовое поле,   изменить это с %_SMSTSUserStatePath% в %SystemDrive%\UserState

  1. Нажмите кнопку «ОК» или «Применить», чтобы сохранить последовательность задач. Если   задание «Задать местоположение в локальном состоянии»   не существует, тогда поищите   Переменная последовательности задач », которая устанавливает   переменная OSDStateStorePath и   затем внесите изменения выше. Если   с использованием MDT 2010 / MDT 2010 Update 1   интеграция, а затем новый «Задание задачи   «Переменная последовательности» должна быть   добавлено после "Определить местное или   Remote UserState "задача, которая переопределяет   переменная OSDStateStorePath:

  2. В консоли администратора ConfigMgr 2007 перейдите к Computer Management - & GT; Operating System Deployment - & GT; Task Sequences узел.

  3. Щелкните правой кнопкой мыши по последовательности задач и выберите «Изменить».

  4. Нажмите на задачу «Определить локальное или удаленное пользовательское состояние», а затем перейдите к   "Добавить" - & gt; «Общие» - & gt; «Поставить задачу   Переменная последовательности ". Это должно создать   задание «Задать переменную последовательности задач»   после "Определить локальный или удаленный   UserState ", но перед   Задача «Запросить государственный магазин».

  5. Во вновь созданном «Задании переменной последовательности задач»:

    • Сразу после Name: текстовое поле, введите в: Set Local State Location
    • Сразу после Task Sequence Variable: текстовое поле, введите в OSDStateStorePath
    • Сразу после Value: текстовое поле, введите в: %SystemDrive%\StateStore
  6. Нажмите кнопку «ОК» или «Применить», чтобы сохранить последовательность задач.

Если на шаге 3 задание «Определить локальный   или Remote UserState "не существует или   был переименован, ищите   Командная строка "задача, которая запускает   скрипт ztiuserstate.wsf, а затем   выполните вышеуказанные шаги.


4

Перво-наперво, попробуйте перестроить свой индекс. Также исключите из индексации любые папки с временными / незавершенными загрузками. Незавершенные файлы по определению повреждены и могут повредить процесс. Видео / аудио кодеки могут также зависать, если при индексации в них выполняется поиск метаданных.

alt text


Можете ли вы уточнить комментарий к метаданным? Если что-то где-то заклинивает, может, это поможет мне подумать об этом.
Ricket

Индексирование пытается получить метаданные, просматривая файлы. Некоторые типы файлов, такие как файлы фильмов AVI, требуют, чтобы кодеки (или загрузчики контейнеров, часто также называемые кодеками) открывали эти файлы и получали разрешение, длину и т. Д. Этот кодек мог зависать, если файл поврежден. Тем не менее, я не сталкивался с проблемой до сих пор в Windows 7, но в XP это было распространенной проблемой.
mtone

4

Мой поиск завис из-за плохого файла Outlook.pst. Я запустил утилиту восстановления PST SCANPST.EXE находится в том же каталоге, что и исполняемый файл Outlook 2007 ( C:\Program Files (x86)\Microsoft Office\Office12 на моей машине Windows 7 x64.)

enter image description here


1
Файл называется SCANPST.EXE
M. Dudley

2

Вы убедились, что ваш жесткий диск не умирает?

Щелкните правой кнопкой мыши диск, откройте диалоговое окно «Свойства», перейдите на вкладку «Инструменты» и выполните проверку на наличие ошибок (при сканировании поврежденного сектора).


да, очень хорошая идея, чтобы убедиться, что основы работают правильно. Также проверьте журнал событий на наличие системных ошибок.
Knox

2

Один из вопросов, заданных здесь, был о том, как узнать, заблокирован ли SearchIndexer.exe, неисправен или зависает, или все еще идет прогресс. Также было бы неплохо посмотреть, какой файл в данный момент индексируется.

Вот способ узнать.

Microsoft с готовностью не предоставляет вам инструменты для просмотра этого, файлы журнала, созданные во время поиска, такие как MSS.log (позже скопированные и измененные под другими именами, а затем удаленные), являются двоичными файлами и не могут быть прочитаны без специальных инструментов.

Еще одна альтернатива, которую я пытался выяснить, висела ли она на одном файле или нет, была испортить SysInternals Process Monitor , Я установил фильтр следующим образом:

  • включить процесс SearchProtocolHost.exe (нота: не SearchIndexer.exe ),
  • включить тип события File System,
  • исключить что-либо на C:\Windows а также C:\ProgramData каталоги,
  • и / или включить каталоги, которые вы на самом деле индексируете,
  • опционально установите операцию на ReadFile,
  • нажмите «Применить» или «ОК», а затем нажмите кнопку «Захват» в левом верхнем углу.

Полученный вид события дает вам все ReadFile операции (и некоторые другие), которые в данный момент читаются службой Microsoft Search Index.

Это должен быть длинный список ReadFile операции и файлы, которые в данный момент индексируются, находятся в столбце Path. Столбец Result должен показать SUCCESS (если нет, то это ваша проблема), и в столбце «Сведения» должно непрерывно отображаться другое смещение (если нет, оно циклично, и это снова является возможным указанием на причину вашей проблемы).


1
+1 @Able Ссылка для Sys | nternals все еще работает! Это еще один, который предоставит полный SysInternals Suite
ElderDelp
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.