资源管理器最近经常假死,打不开文件或者此电脑。
网上没找到能从根源解决这个问题的方案(可能就是电脑自己的毛病。。),只好在每次打不开此电脑或者打不开文件的时候,打开任务管理器手动重启explorer.exe进程。
既然都这样了就想着写个bat脚本再改进一下,能方便一些是一些。顺便学着写一下bat脚本hhh。先是想着直接kill掉explorer.exe再重启,但是这样它的两个子进程都会被kill掉,重启过程桌面会黑一下屏(explorer.exe是Windows程序管理器或者文件资源管理器,它用于管理Windows图形壳,包括桌面和文件管理。删除该程序会导致Windows图形界面无法使用。from 百度百科),这我可忍不了。但看了看taskkill的参数好像并不支持kill特定的子进程,只有一个按pid来kill进程的参数能kill特定的子进程,但是pid每次是会随进程重启而改变的啊喂!!还不如我手动重启嘛。
那咋办,还看到了一个内存使用的列,嗯,有想法。
我们在任务管理器里看到这个管理桌面的子进程的内存使用情况好像比管理文件的子进程大数倍,那我们应该可以用这个属性来区别这两个子进程(应该。。
经过一番调试,感觉好像可以欸!(虽然脚本有些部分有点太过偶然,可能有更好的命令或者参数之类的,不过运行出来了就行hhhh
注意bat脚本里常量a有两个%%,而调试的时候只有一个%。。。
@echo off
REM explorer.exe有两个子进程,用于桌面和文件管理
REM 一般taskkill会终止进程和由它启用的子进程,
REM 这里实现只kill文件管理进程终止文件假死(都终止桌面会短暂黑屏
REM 由于重启服务pid会重新分配,不能和explorer.exe子进程“绑定”,所以考虑用子进程内存使用量来识别进程
REM 一般桌面管理进程内存使用量比文件管理进程大数倍(应该
REM 筛选出文件管理进程的内存使用情况,用b保存
for /f "skip=4 tokens=5 delims= " %%a in ('tasklist /fi "imagename eq explorer.exe"') do set b=%%a
REM 字符串转整形,向上取整(整形用于和memusage比较,向上取整是由于内存使用量可能会小范围波动,(此脚本依赖此bug运行
set /a b=%b%,0
set /a b=%b%
set /a b=%b%*1000+1000
REM kill掉内存使用量小于b的explorer.exe子进程
taskkill /f /fi "MEMUSAGE lt %b%" /fi "IMAGENAME eq explorer.exe"
REM 延时1s启动explorer.exe
ping -n 1 127.0.0.1>nul
explorer.exe
REM 退出cmd
exit
最后我们可以通过改注册表把这个脚本放到右键菜单里去hiahia~能方便一点是一点,当然,换个电脑或者重装更方便~lol