大家好,这是我的 HP Elitebook 8760w 上的创作者 (1703) 更新 (OS Build 15063.413) 后出现的一个奇怪的问题。Defragment and Optimize drives
根本无法启动。例如,单击Start menu -> Microsoft Administrative Tools -> Defragment and Optimize Drives
没有任何反应。打开任务管理器后,显然没有启动任何进程。(或运行的进程不足以注册)此外,打开管理员控制台并执行dfrgui.exe
也没有任何反应。
我希望这里有人可能对如何进一步调试该问题有一些想法。从下面执行的内核跟踪来看,尝试启动dfrgui.exe
结果退出状态 259和实际错误代码 15005显然指向的事件数据与清单中提供的模板不匹配?昨天早上更新之前,碎片整理和优化驱动器工作正常,现在却不行了。
我已经从更新目录更新到 KB4022716(OS Build 15063.447)——没有帮助(它确实修复了第一个版本 .413 更新中的许多其他问题)。
以下是我从命令行获取的一些诊断信息,dfrgui -- 无,defrag -- OK:
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
然后我处理了事件文件,系统事件.etl,(5.5M)tracerpt systemevents.etl
产生了巨大的 46M dumpfile.xml
。我查看了转储文件并将其与相关的开始和结束事件配对dfrgui.exe
(幸好只有 428K)。但是,我不是解释窗口内核跟踪的专家。这两个文件都太大了,无法在这里使用,但如果它们有帮助,我可以提供更多部分。
一组引人注目的事件数据是:
<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)
我怀疑答案就埋在作为内核跟踪的一部分我发布的长字节串中。(这是我不知道如何解码的东西)。
我发现 ExitStatus 259 有点讽刺:
“重要提示:GetExitCodeProcess 函数仅在线程终止后才返回应用程序定义的有效错误代码。因此,应用程序不应使用 STILL_ACTIVE (259) 作为错误代码。如果线程返回 STILL_ACTIVE (259) 作为错误代码,则测试此值的应用程序可能会将其解释为线程仍在运行,并在线程终止后继续测试线程是否完成,这可能会使应用程序陷入无限循环。”
有人知道我可以尝试什么来运行 dfrgui.exe 吗?如果没有,我还可以做其他诊断吗?我已经在微软问答板上发帖,但到目前为止,我只收到了“Me Too”的回复和回滚的建议。(因为这似乎是我知道的唯一问题,所以回滚的风险几乎不大)。下一步该尝试什么?如果我可以发布其他可能有帮助的内容,请告诉我。
在 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。defrag.exe ExitStatus 之后的事件中的 EventPayload 是:
<EventPayload>B4090000EC2B000000C0430081D6FFFF0060430081D6FFFF00003802BC00000000E03702BC0000000F0000000000000060B0E1B7F77F000000B04102BC00000000000000080502000000</EventPayload>
答案1
啊哈!我找到问题了!
由于某种无法解释的原因(也许是在 1703 安装时宇宙字符串被错误调整,或者只是小精灵),"Optimize drives"
服务启动失败"Disabled"
。不要问我如何或为什么...
基本上,通过侦听TaskMgr
服务,我找到了'defragsvc'
我随后单击 的那个"open in Services"
。然后我发现“defragsvc”实际上已被重命名"Optimize drives"
。检查属性后,我发现它已禁用(我将其改为'Manual'
)然后就好了!点击碎片整理和优化驱动器在开始菜单中现在可以正常工作。
一个该死的应用程序不告诉你,让你头疼了 4 天“嘿,我基于残疾人服务”当您从命令行调用它时...
现在微软开发人员面临的问题是“到底是什么原因导致在 1703 更新期间将其设置为禁用??“在 1703 更新之前它并没有被禁用。