排查突然弹出的CMD窗口
我的电脑有时候什么也没动,但是突然会弹出个cmd框框不知道执行了什么,又里面消失了,怎么排查或者怎么监听下一次这种情况找到罪魁祸首?
查看过程
我先查看系统现有的进程审计设置和近期任务记录,确认有哪些线索,以及怎样记录下一次闪现窗口对应的程序和启动来源。
可以,最有效的办法是记录“进程启动时间、完整命令、父进程”。窗口即使只闪一下,也能留下是谁启动它的证据。
我刚检查了你的电脑,目前:
- 进程创建审计未开启,命令行记录也未开启。
- 任务计划程序的运行日志未开启。
- 有一些今天早些时候的进程事件,但目前不能据此确定闪窗来源。
这次只做了检查,没有修改系统设置。
1. 开启记录,等下次闪窗
以管理员身份打开 PowerShell,依次执行:
# 开启进程创建审计,使用 GUID 避免系统语言差异
auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}" /success:enable
# 在事件中记录完整命令行
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" /v ProcessCreationIncludeCmdLine_Enabled /t REG_DWORD /d 1 /f
# 开启任务计划程序历史,方便对照是谁定时启动的
wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true
Windows 会在安全日志中记录 4688 事件,包含程序路径、父进程及启用后的命令行。这种方式能记录启动后马上退出的程序,无需一直开着 PowerShell。微软说明
注意:命令参数也会写入本机日志,可能包含令牌或密码,分享记录前需要打码。
2. 下次闪窗后,立即提取最近记录
记下大概时间,然后在管理员 PowerShell 中执行:
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4688
StartTime = (Get-Date).AddMinutes(-10)
} | ForEach-Object {
$eventXml = [xml]$_.ToXml()
$fields = @{}
foreach ($item in $eventXml.Event.EventData.Data) {
$fields[$item.Name] = $item.InnerText
}
[pscustomobject]@{
时间 = $_.TimeCreated
程序 = $fields['NewProcessName']
命令行 = $fields['CommandLine']
父进程 = $fields['ParentProcessName']
父PID = $fields['ProcessId']
PID = $fields['NewProcessId']
}
} | Where-Object {
$_.程序 -match '\\(cmd|powershell|pwsh|conhost|OpenConsole|WindowsTerminal|wscript|cscript)\.exe$'
} | Format-List
重点看:
- 命令行:例如
cmd.exe /c "某个目录\update.bat",直接指向运行的脚本。 - 父进程:说明哪个程序启动了它,例如某个更新器或后台工具。
- 时间:如果指向计划任务,打开“事件查看器 → 应用程序和服务日志 → Microsoft → Windows → TaskScheduler → Operational”,对照同一时间的任务名称。
黑框也可能是其他控制台程序。如果这段筛选没有结果,应继续查看同一时间的全部 4688 事件,不能因此排除闪窗。
下次出现后,尽快查询,并把对应时间附近的记录发给我,就能沿着启动关系继续定位。目前安全日志容量约 20 MB,记录较多时旧事件可能被覆盖。
终于又出现了,你快执行下看看发生了什么
查看过程
我马上查最近几分钟的进程启动记录和计划任务日志,找出刚才闪窗的程序及其启动来源。
黑框大约在几点几分出现?是在你打开 Codex 之前,还是打开之后?日志里 15:13:56 和 15:14:10 之后有两组不同的启动记录,需要对上时间。
查看过程
找到一条很明确的线索:15:13:56–15:13:57,夸克的桌面网盘组件在后台升级时调用了 tasklist.exe 和 reg.exe,两次都启动了控制台宿主。日志已经保存,我再核对它对应的计划任务和程序信息。
我忘记了,反正就1-2分钟,我打开Codex之前
基本定位到了:这次高度吻合夸克网盘桌面组件的后台升级。你确认是在打开 Codex 之前,正好与日志时间对应。
| 时间 | 实际发生的操作 |
|---|---|
| 15:09:39 | 夸克计划任务启动自动更新器 |
| 15:13:27 | 开始静默安装夸克 7.2.0.981 |
| 15:13:56–57 | 桌面组件调用 tasklist.exe、reg.exe,分别启动控制台宿主 |
| 15:13:59 | 更新后重新启动桌面组件 |
| 15:14:07 | 你打开 Codex |
最关键的来源是:
D:\soft\Quark\components\clouddrive_desktop_widget\
new_clouddrive_desktop_widget.exe --upgrade
它执行了两条命令:
tasklist /fi "imagename eq clouddrive_desktop_widget.exe" /fo csv /nh
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v CloudDriveDesktopWidget
分别是在检查桌面组件是否运行、查询它的开机启动项。这两次控制台启动是本次闪窗的最强线索;日志本身不记录窗口是否可见,因此还不能百分之百断定。
相关更新器和当前桌面组件的数字签名均有效,签名方为阿里巴巴。目前证据指向夸克更新过程。
我已保存排查结果和完整时间线,没有禁用或修改任何任务。
就是这个,我要如何把这个夸克自动运行禁用掉
查看过程
我先检查夸克有哪些自动启动入口,区分后台更新和桌面组件的开机启动,再给你对应的禁用方法。
查看过程
当前启用的是夸克 1.0.0.21 的自动更新计划任务,旧版任务已经禁用。我会先备份,再禁用这个触发后台更新的任务;你仍可以手动打开夸克。
已经帮你禁用了触发这次闪窗的夸克自动更新计划任务,并确认状态为 Disabled。
- 该任务不会再按计划启动后台更新。
- 仍然可以手动打开夸克。
- 原任务已备份。
以后需要恢复,可在“任务计划程序 → 任务计划程序库 → QuarkUpdaterUser → QuarkUpdater”中启用 1.0.0.21 那项。
这次禁用的是已确认的触发入口;以后重新安装或更新夸克,可能会重新创建任务。
我记得windows电脑可以在哪设置 启动项,禁用,你现在直接改动的是Quark 文件?我想走正常设置流程可以吗?我自己操作
可以,你自己通过 Windows 界面操作就行。我没有修改夸克的程序文件,只是在 Windows“任务计划程序”里把它的自动更新任务设为“禁用”,相当于你在界面中右键点“禁用”。
你记得的“启动项”在这里:
- Windows 10:右键任务栏 → 任务管理器 → 详细信息 → 启动。
- Windows 11:右键开始菜单 → 任务管理器 → 启动应用。
- 也可以到 设置 → 应用 → 启动。
找到夸克相关项目后禁用即可。这主要控制登录时自动启动。
这次闪窗来自定时更新任务,对应的正常操作入口是:
- 按
Win + R,输入taskschd.msc,回车。 - 左侧展开 任务计划程序库 → QuarkUpdaterUser → QuarkUpdater。
- 找到名称包含 1.0.0.21 的任务。
- 右键 → 禁用。
这一项我已经设为禁用,你现在打开可以直接核对;如果想恢复后亲自操作,右键“启用”,再右键“禁用”即可。
为什么我执行你的PowerShell 没有看见夸克相关的,你却能查出来?
因为我之前给你的 PowerShell 筛选范围太窄,只显示几种常见命令行程序,没有直接显示夸克进程。这是那段脚本的局限,我之前应该说明得更清楚。
脚本最后这段筛选:
Where-Object {
$_.程序 -match '\\(cmd|powershell|pwsh|conhost|OpenConsole|WindowsTerminal|wscript|cscript)\.exe$'
}
会排除夸克程序,也会排除这次真正执行命令的 tasklist.exe 和 reg.exe。即使显示了 conhost.exe,它的父进程也只是这两个 Windows 工具,看起来没有夸克。
我这次继续查询了同一时间的全部进程记录,按父进程 PID 逐级追溯,才还原出:
夸克自动更新器
→ 夸克安装程序
→ 夸克桌面组件升级程序
→ tasklist.exe / reg.exe
→ conhost.exe(控制台宿主)
再用计划任务日志确认,是夸克的定时更新触发了这条链。
你和我读的是同一份 Windows 日志,区别在于我扩大了查询范围并追查了上级进程。以后把脚本中的整个 Where-Object { ... } 部分去掉,保留最后的 | Format-List,就能查看全部程序的启动记录。
服务里面压根没看见Quark 相关的

你截图里打开的是任务管理器 → 服务。夸克这次用的是 Windows 计划任务,所以在服务列表里找不到;我之前检查时也没发现夸克相关服务。
请按这个路径查看:
- 按
Win + R。 - 输入
taskschd.msc,回车,打开“任务计划程序”。 - 左侧依次展开:
任务计划程序库 → QuarkUpdaterUser → QuarkUpdater - 中间找到名称包含
1.0.0.21的任务,它现在应该显示为 “已禁用”,这就是我改的那一项。
“服务”“启动项”“计划任务”是三个不同入口。这次需要看的是计划任务。