前语:
今天又被迅雷给流氓了一把,软件卸载后,迅雷的文件始终删除不了,很多dll文件报拒绝访问
解决方案:
- gps|?{$_.Modules -match 'minizip|XLBugHandler|XLFSIO|XLLuaRuntime|zlib1|xappdisp|xappluatool|xappex'}|kill -force
- Remove-Item -Recurse -Force "$env:AllUsersProfile\Application Data\Thunder Network"
在使用过程中发现explorer进程被强制结束后会自动开启,所以上面两条语句要一起执行。
查看Thunder Network文件夹是否完全删除
explorer "$env:AllUsersProfile\Application Data"
基本思路就是:结束加载删除文件夹内dll的进程+强制删除文件夹
所以问题的关键是怎样找出有哪些进程加载了删除文件夹内的模块,这时候就可以使用Get-Process cmdlet,使用其中的modules属性扩展来匹配,那么匹配的方式有两种,
一种是模块的文件名称(包括待删除文件的路径的模块文件全路径名),另一种是模块的名称
下面展示的是怎么样来查这些进程(以网易闪电邮客户端进程为例):
- PS D:\540> gps Flashmail|select -expand modules|select filename,modulename
- PS D:\540> gps|?{$_|select -expand modules -errorAction SilentlyContinue|?{$_.filename -like 'C:\app\Netease\*'}}
- PS D:\540> gps|?{$_|select -expand modules -errorAction SilentlyContinue|?{$_.filename -like 'C:\app\Netease\网易闪电邮\*'}}
- PS D:\540> gps|?{$_|select -expand modules -errorAction SilentlyContinue|?{$_.filename -match '.*网易闪电邮.*'}}
- PS D:\540> gps|?{$_|select -expand modules -errorAction SilentlyContinue|?{$_.ModuleName -eq 'CrashRpt.dll'}}
- PS D:\540> gps|?{$_|select -expand modules -errorAction SilentlyContinue|?{$_.ModuleName -eq 'sqlite3.dll'}}
- PS D:\540> gps Flashmail|select -expand modules|?{$_.ModuleName -eq 'CrashRpt.dll'}|select filename,modulename