Все, это любопытная проблема после обновления создателей (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) в качестве кода ошибки, приложения, которые проверяют это значение, могут интерпретировать его как означающее, что поток все еще работает, и продолжать проверять завершение потока после его завершения, что может привести к приложение в бесконечный цикл. "
У кого-нибудь есть какие-либо дополнительные идеи относительно того, что я могу попытаться запустить 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>