当 Windows 笔记本电脑的电池电量不足时,就会出现一条消息提示。
Explorer.exe 处理此任务,但关闭该通知后它将保留在任务栏中。
svchost 使用以下命令行参数调用 Explorer.exe:explorer.exe /factory {ceff 45ee-c862-41 de-aee2-a022c81eda92} -Embedding
我发现{ceff 45ee-c862-41 de-aee2-a022c81eda92}
CLSID 用于创建另一个 explorer 实例(用于显示通知),该实例作为与创建桌面和任务栏的 shell 进程不同的进程运行。我实际上怀疑这个 explorer.exe 实例没有与 explorer.exe shell 进程通信,这导致了错误。
当 explorer.exe 被调用来显示该通知时,如何强制将其作为 shell 进程运行?如果我{ceff 45ee-c862-41 de-aee2-a022c81eda92}
从注册表中删除 CLSID 项,svchost 是否会在没有命令行参数的情况下调用 explorer.exe,或者 svchost 是否无法调用 explorer.exe?
PD:
我还发现了RunAs
中的键HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}
(这是 explorer.exe 的 AppId 注册表位置),其值为Interactive User
。该值也可以替换为nt authority\localservice
、nt authority\networkservice
或nt authority\system
。如果我将当前值替换为上述值之一,是否可以解决问题?