1

Все, это любопытная проблема после обновления создателей (1703) (сборка ОС 15063.413) на моем HP Elitebook 8760w. Defragment and Optimize drives вообще не запускаются. Например, нажатие на Start menu -> Microsoft Administrative Tools -> Defragment and Optimize Drives ничего не дает. С открытым диспетчером задач очевидно, что ни один процесс не запущен. (или не запускается достаточно для регистрации). Кроме того, открытие консоли администратора и выполнение dfrgui.exe тоже ничего не делают.

Я надеюсь, что кто-то здесь может иметь несколько мыслей о том, как продолжить отладку проблемы. Из приведенной ниже трассировки ядра, попытка запустить dfrgui.exe приводит к ExitStatus 259 и фактическому ErrorCode 15005, явно указывающим на данные события, не соответствующие шаблону, предоставленному в манифесте. Дефрагментация и оптимизация дисков работали просто отлично вчера утром перед обновлением, теперь ничего.

Я обновился до KB4022716 (сборка ОС 15063.447) из каталога обновлений - не помогло (в первой версии .413 было исправлено много других проблем).

Вот пара диагностических сообщений о том, что я получаю из командной строки: dfrgui - ничего, дефрагментация - ОК:

PS C:\Users\david> dfrgui
PS C:\Users\david> write-host $?
True

PS C:\Users\david> dfrgui /?
PS C:\Users\david> dfrgui c:


PS C:\Users\david> defrag /?
 Microsoft Drive Optimizer
 Copyright (c) 2013 Microsoft Corp.

Description:

        Optimizes and defragments files on local volumes to
         improve system performance.

<snip>

В дальнейших усилиях по устранению проблемы я создал трассировку ядра для попытки запуска dfrgui.exe с помощью короткого пакетного файла:

logman start "NT Kernel Logger" -p "Windows Kernel Trace" (process,thread,img,disk,net,registry) -o systemevents.etl -ets
dfrgui.exe
logman stop "NT Kernel Logger" -ets

Затем я обработал файл событий systemevents.etl (5.5M) с помощью tracerpt systemevents.etl который создал огромный dumpfile.xml . Я просмотрел дамп-файл и связал его с начальными и конечными событиями, связанными с dfrgui.exe (который, к счастью, составляет всего 428 КБ). Однако я не волшебник в интерпретации трассировки ядра окна. Оба файла слишком велики, чтобы использовать их здесь, но я могу предоставить дополнительные части, если они помогут.

Один набор данных о событиях, который выделялся, был:

 <EventData>
   <Data Name="UniqueProcessKey">0xFFFFA008A692A2C0</Data>
   <Data Name="ProcessId">0xFCC</Data>
   <Data Name="ParentId">0x25F8</Data>
   <Data Name="SessionId">       1</Data>
   <Data Name="ExitStatus">259</Data>
   <Data Name="DirectoryTableBase">0x1EAF8A000</Data>
   <Data Name="Flags">       0</Data>
   <Data Name="UserSID">\\ELITE\david</Data>
   <Data Name="ImageFileName">dfrgui.exe</Data>
   <Data Name="CommandLine">dfrgui.exe</Data>
   <Data Name="PackageFullName"></Data>
   <Data Name="ApplicationId"></Data>
  </EventData>

Смотря, следующее событие важно, так как оно относится к обработке ошибки:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
   <Provider Guid="{9e814aad-3204-11d2-9a82-006008a86939}" />
   <EventID>0</EventID>
   <Version>3</Version>
   <Level>0</Level>
   <Task>0</Task>
   <Opcode>1</Opcode>
   <Keywords>0x0</Keywords>
   <TimeCreated SystemTime="2017-07-02T00:16:57.024179100-0500" />
   <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
   <Execution ProcessID="9720" ThreadID="11156" ProcessorID="2" KernelTime="45" UserTime="15" />
   <Channel />
   <Computer />
  </System>
  <ProcessingErrorData>
   <ErrorCode>15005</ErrorCode>
   <DataItemName />
   <EventPayload>CC0F0000082800000040659081D9FFFF00E0649081D9FFFF0000C8987A00000000E0C7987A0000000F000000000000008020DDE7F77F000000B0B8987A00000000000000080502000000</EventPayload>
  </ProcessingErrorData>
  <RenderingInfo Culture="en-US">
   <Opcode>Start</Opcode>
   <Provider>MSNT_SystemTrace</Provider>
   <EventName xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">Thread</EventName>
  </RenderingInfo>
  <ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
   <EventGuid>{3d6fa8d1-fe05-11d0-9dda-00c04fd7ba7c}</EventGuid>
  </ExtendedTracingInfo>
 </Event>

Код ошибки 15005 :

ERROR_EVT_INVALID_EVENT_DATA
  15005 (0x3A9D)
  The event data raised by the publisher is not compatible 
  with the event template definition in the publisher's manifest.

(согласно: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681384(v=vs.85).aspx)

Я подозреваю, что ответ похоронен в длинной строке байтов, содержащихся в I, размещенном как часть трассировки ядра. (что-то я понятия не имею, как декодировать).

Я нахожу ExitStatus 259 немного ироничным, учитывая:

«Важно! Функция GetExitCodeProcess возвращает действительный код ошибки, определенный приложением, только после завершения потока. Поэтому приложение не должно использовать STILL_ACTIVE (259) в качестве кода ошибки. Если поток возвращает STILL_ACTIVE (259) в качестве кода ошибки, приложения, которые проверяют это значение, могут интерпретировать его как означающее, что поток все еще работает, и продолжать проверять завершение потока после его завершения, что может привести к приложение в бесконечный цикл. "

См .: https://msdn.microsoft.com/en-us/library/windows/desktop/ms683189%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

У кого-нибудь есть какие-либо дополнительные идеи относительно того, что я могу попытаться запустить dfrgui.exe? Если нет, могу ли я провести какую-либо другую диагностику? Я отправил сообщение на доску ответов Microsoft, но до сих пор получил только "Я тоже" за проблему и предложения откатиться. (что, поскольку это кажется единственной проблемой, о которой я знаю, вряд ли делает риск отката привлекательным). Что попробовать дальше? Дайте мне знать, если я смогу опубликовать что-то еще, что может помочь.


По предложению Biswa, после отслеживания дальнейших описаний опций для defrag.exe чтобы убедиться, что операции выполняются правильно для моего SSD, я попытался вручную обрезать его. Похоже, что dfrag.exe ничего не делает, кроме запуска и выхода без дополнительных действий . Пример,

PS C:\Users\david\Documents\dev\gtk\gtkwrite> defrag /C /H /O /V
Microsoft Drive Optimizer
Copyright (c) 2013 Microsoft Corp.

PS C:\Users\david\Documents\dev\gtk\gtkwrite> write-host $?
True

Таким образом, кажется, что defrag ничего не делает, кроме печати авторских прав и выхода. Я также пытался просто с помощью C: /A /V заставить его специально анализировать C , но независимо от того, что я пытаюсь, он просто печатает авторское право и завершает работу.

Я запустил другую трассировку ядра на defrag.exe, и вывод практически идентичен dfrgui.exe. Тот же 259 ExitStatus. EventPayload в событии, следующем за defrag.exe ExitStatus, был:

<EventPayload>B4090000EC2B000000C0430081D6FFFF0060430081D6FFFF00003802BC00000000E03702BC0000000F0000000000000060B0E1B7F77F000000B04102BC00000000000000080502000000</EventPayload>

1 ответ1

1

Ах ах! Я нашел проблему!

По какой-то необъяснимой причине (возможно, космическая строка была неправильно настроена при установке 1703 года, или просто гремлины), запуск службы "Optimize drives" был "Disabled" . Не спрашивайте меня, как или почему ...

По сути, отслеживание сервисов TaskMgr привело меня к 'defragsvc' который я затем щелкнул, чтобы "open in Services" . Затем я обнаружил, что defragsvc фактически переименовано в "Optimize drives" . Проверка свойств, я обнаружил, что он отключен (который я изменил на 'Manual') и альт! Нажатие на Дефрагментировать и оптимизировать диски в меню "Пуск" теперь работает как надо.

4 дня головной боли из-за проклятого приложения, которое не скажет «Эй, я основан на отключенной службе», когда вы вызываете его из командной строки ....

Теперь вопрос к разработчикам MS: «Какого черта это вызвало отключение во время обновления 1703 года?»Msgstr "Оно не было отключено до обновления 1703 года.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .