先交代一下背景我手上有几台办公电脑装了深信服的那套终端安全组件就是Sangfor EDR配套的PWE我理解是终端防护的准入或者安全客户端组件。最近因为项目调整需要把这套东西从机器里彻底清掉换成另外一套终端管理方案。本来以为就是个普通卸载结果一顿操作下来发现事情没那么简单——卸载程序走完进度条目录照样躺在C盘里服务在服务管理器里消失得干干净净注册表里却还有一堆残留项最烦的是第二次想补刀删除残留目录的时候系统直接弹“执行服务权限失败”整个目录怎么都删不掉。这篇就记录一下我完整删除Sangfor PWE的过程以及踩过的坑和最终的解决方案。给遇到同样麻烦的朋友一个参考。1. 动手之前先搞明白为什么Sangfor PWE这么难删先说清楚PWE是什么。Sangfor的终端管理套件里PWE算是比较底层的一个服务组件负责跟EDR控制台通信、下发策略、做准入检查这些事情。它不像普通软件那样一个exe装完就完事而是会拆成好几个服务进程分散在系统各个位置并且和系统驱动层有交互。这种设计带来的一个直接后果就是如果你只用常规手段去卸载比如控制面板里的“卸载程序”或者直接shiftdelete删目录基本都会失败。原因有这么几条自我保护机制。安全软件普遍有自保护PWE的服务在运行状态下会锁定关键文件不允许外部进程写入或删除自己的核心文件包括dll、sys驱动、配置缓存文件。多服务联动启动。主卸载程序退出前会先停掉一部分服务但有几个辅助服务比如和系统防火墙、网络过滤驱动相关的不会跟着停它们会持续占用文件句柄。句柄不释放文件就删不掉。驱动级残留。PWE会加载内核驱动做网络数据过滤这个驱动文件不会被主程序卸载干净。驱动文件虽然不在服务列表里但被系统内核持有普通状态下你连改名都改不了。卸载日志不彻底。就算主程序卸载成功计划任务、WMI事件订阅、注册表RUN键、AppInit_DLLs这些位置还留着启动项下次开机它又会尝试拉起来。所以整个过程不能指望一键完成正确思路是先卸载主程序 → 再禁用残留服务 → 然后清驱动 → 接着删注册表 → 最后删目录文件。顺序错一步后面的步骤就容易失败。提示如果你机器上PWE还在正常运行就不要想着直接去删目录。强制删除运行中的文件可能引发蓝屏我当时在一台测试机上试过直接强制删除sys驱动文件还没删完系统就开始频繁卡顿后来果断放弃老老实实走卸载流程。2. 准备工作先断网、退台、备份正式操作之前有几个准备动作不要跳过。2.1 断开网络再操作这一步容易被忽略但实际操作中很重要。PWE组件会定期向管理控制台上报状态只要它还连着管理端控制台就能检测到客户端状态异常有时候甚至会在你卸载的中间过程里远程下发指令重新拉起服务。我当时是先断网再操作的避免卸载过程中控制台反复下发“自愈”指令导致服务停掉又被拉起来卸载程序来回报错。如果你是服务器或者生产机器不方便断网至少要把PWE相关的通信端口在防火墙里临时拦住。2.2 确认是否有管理端下发的卸载密码很多企业的Sangfor终端是统一管控的卸载的时候会要求输入卸载密码。如果你不是管理员压根走不到卸载流程那一步。这个密码要提前和负责终端管理的同事确认好等卸载到一半发现要密码整个流程就卡住了。我在处理第一台机器的时候就是没注意这点卸载程序弹出密码框问了一圈人才拿到卡了快半小时。2.3 备份重要数据严格来说PWE卸载不会动用户数据但为了稳妥建议把电脑上的重要文件先同步到网盘或者移动硬盘。尤其是注册表清理这个环节手抖删错键值可能导致某些软件启动异常有个备份总是心安一点。3. 主程序卸载别用控制面板用安装目录里的卸载程序很多教程会教你去控制面板的“程序和功能”里卸载我自己试下来这个方式不是不行但卸载得不干净的概率更高。更推荐的做法是从Sangfor PWE安装目录里直接运行它自带的卸载程序。3.1 找到卸载程序的路径默认安装路径一般是C:\Program Files (x86)\Sangfor\PWE或者是C:\Program Files\Sangfor\PWE你也可以打开任务管理器找到正在运行的PWE相关进程右键“打开文件所在的位置”直接跳到它的安装目录。目录下一般会有一个uninstall.exe或者unins000.exe之类的卸载程序具体名字取决于版本。如果没有找到明确命名的卸载程序也可以去注册表里查卸载信息定位到安装路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall在这两个路径下逐个翻查找Sangfor或PWE相关的键里面会有UninstallString字段记下命令行内容。3.2 以管理员身份运行卸载程序右键卸载程序选择“以管理员身份运行”。注意UAC弹窗出来的时候要确认是“是”不是直接回车。卸载过程可能会比较慢几次卡在某个步骤界面看似没反应耐心等一下不要手动去关窗口。PWE的卸载程序会先停服务、再删文件最后清理驱动。这里如果有杀毒软件比如你装了360或火绒建议先退出第三方杀软拦截卸载程序的写文件操作会导致卸载结果不完整。我当时卸载到大概70%的位置弹了一个提示框说“部分组件卸载失败是否继续”我点了继续。卸载程序最终显示完成但实际残留了一大堆东西。所以即使提示完成也不要以为事情就结束了——真正的重头戏在后面。3.3 重启一次系统主程序卸载完成后先重启一遍系统。重启的作用是让那些卸载程序没能停掉的驱动在启动阶段能正常加载如果驱动文件已被标记删除同时释放掉大部分被占用的文件句柄。如果不重启后面删残留目录时会遇到“文件被占用”的报错。注意一定不要在这个阶段就把安装目录手动删掉。有些文件正在被已卸载但未完全停掉的进程占用手动删只能删掉一部分剩下的删不掉还会把后续的清理路径搞乱。4. 清残留服务删除之前必须先停掉还要禁掉自启重启进入系统之后先看一下服务列表里还有没有Sangfor相关的服务。按下Win R输入services.msc回车在服务列表里筛选名字里带Sangfor、PWE、SAIO、EDR这些关键词的服务。我当时看到的情况是这样几个服务还在服务名称显示名称状态SangforSvcSangfor Service正在运行SAIO_SvcSangfor AIO Service已停止PWE_SvcPWE Client Service正在运行SangforEDRSangfor EDR Service正在运行重点来了这些服务通过services.msc直接右键停止有可能能停掉也有可能报“拒绝访问”或者“无法停止服务”。我当时遇到的状态是能停掉大部分但有那么一两个服务点“停止”之后过几秒又会自动重启。4.1 用sc命令强制停止服务对于图形界面搞不定的服务用命令行工具sc配合管理员权限来搞。打开一个管理员身份的命令提示符逐个执行sc stop PWE_Svc sc stop SangforSvc sc stop SAIO_Svc sc stop SangforEDR如果提示“服务并未启动”也没关系说明它已经是停止状态了。重点要看有没有提示“拒绝访问”或者“服务正在停止然后又启动”。对于停掉之后又自动拉起来的服务我这里有一个经验那就是先不要管它为什么自启直接改启动类型。把服务禁用之后它就是被其他进程唤起来也会立刻失败类似于釜底抽薪sc config PWE_Svc start disabled sc config SangforSvc start disabled sc config SAIO_Svc start disabled sc config SangforEDR start disabled注意sc config命令的start后面必须有一个空格没有空格会报参数错误。这是我翻了半天文档才发现的细节。把服务禁用之后再尝试停止一般都停得掉了。4.2 处理还在运行中的衍生进程有些PWE组件不止注册了Windows服务还会以普通进程的方式常驻后台比如计划任务拉起的或者注册表RUN键拉起的。服务全停掉之后打开任务管理器检查一下还在运行的进程里有没有以下名字PWE*.exeSangfor*.exeSAIO*.exeEDR*.exe有的话直接右键结束进程。如果进程结束之后自动拉起也不用慌多半是注册表RUN键或者计划任务在作怪后面清理注册表和计划任务的时候就能解决。5. 删除残留驱动最难啃的骨头服务清完之后接下来是PWE卸载时最容易出问题的环节——内核驱动。安全软件的内核驱动文件不会出现在普通文件删除的可见逻辑中也不会显示在服务管理器里显示为“内核驱动程序”的服务里有一部分但还有一部分靠驱动加载器手动注册。这个阶段如果没删干净以后装其他安全软件很可能出现冲突蓝屏概率极高。5.1 查当前加载的Sangfor驱动打开管理员命令提示符执行driverquery拉出来的列表中找名字带Sangfor、PWE、SAIO、EDR的文件。它们对应磁盘上的.sys文件一般位于C:\Windows\System32\drivers\目录下。我当时查到了这几个sangfor_bd.syssangfor_filter.sysPWE_NdisMonitor.sysSAIO_ELAM.sys注意查到驱动之后不要急着删sys文件。先运行一次fltmc看看Filter列表中还有没有Sangfor相关的微过滤驱动。如果有说明这个驱动还在挂载状态必须先把挂载卸载掉。有人会问驱动在运行中能强制删除吗答案是技术上可以但没必要冒险。更稳妥的办法是记住驱动文件名然后进入系统配置msconfig在“引导”页签下勾选“安全引导”以安全模式重启系统再进drivers目录删除这些.sys文件。我当时没走安全模式是通过停掉依赖它的服务之后直接在正常模式下把sys文件改名删除的。具体的做法是cd C:\Windows\System32\drivers ren sangfor_bd.sys sangfor_bd.sys.bak ren sangfor_filter.sys sangfor_filter.sys.bak ren PWE_NdisMonitor.sys PWE_NdisMonitor.sys.bak ren SAIO_ELAM.sys SAIO_ELAM.sys.bak改成.bak是为了避免文件被系统锁住时直接被判定删除失败改名成功就说明文件句柄已经被释放了。确认改名成功后再执行del sangfor_bd.sys.bak del sangfor_filter.sys.bak del PWE_NdisMonitor.sys.bak del SAIO_ELAM.sys.bak5.2 注册表里删驱动的服务键值驱动只是文件删除还不行注册表里驱动的注册信息不删掉下次重启系统会因为找不到文件而报错。打开注册表编辑器定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services在这个位置下找Sangfor、PWE、SAIO、EDR相关的键找到一个删一个。如果担心误删老办法右键导出注册表键值备份到一个.reg文件确认系统无异常之后再扔回收站。这里我踩过一个坑有一项服务的Start值我改了之后忘记改回来导致重启之后系统服务出现了奇怪的问题。所以还是建议整键删除不要只改值。改了值等于留了个残废的注册表项在那里后续排查问题反而更费劲。6. 清计划任务和自启动项服务和驱动都清掉之后系统重启一次再检查自动启动项。这个环节不上点心的话PWE的某些组件可能会在开机时被重新拉起。6.1 计划任务打开任务计划程序库在筛选器里搜Sangfor、PWE、SAIO相关任务名右键禁用并删除。我碰到过的情况是计划任务里有三个任务名为Sangfor Update Check、PWE Health Monitor、SAIO Telemetry前两个禁用删除很顺利第三个删的时候提示“拒绝访问”。后面通过命令行方式删掉的schtasks /delete /tn \Sangfor\SAIO Telemetry /f如果提示找不到任务去C:\Windows\System32\Tasks\目录下找同名文件直接删除然后重启计划任务服务net stop schedule net start schedule6.2 注册表启动项还是那几个注册表位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run逐个看有没有带Sangfor、PWE、SAIO关键字的启动项。有就右键删除。还需要注意一个位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows这里有一个AppInit_DLLs值。如果里面有sangfor相关的dll路径清空这个值再点确定。这个问题比较隐蔽因为平时大家不会翻到这一层但它确实会导致一些dll注入到所有进程里既影响性能又难清理。7. 删除安装目录和各种残留文件走到这一步才算真正开始删除“Sangfor PWE”的安装目录。不建议直接在资源管理器里右键删除我已经踩过这个坑了。PWE的目录里有很多受保护文件在资源管理器界面删除时经常弹“需要管理员权限”或“操作无法完成”提示即便你是管理员账户也一样。更推荐的做法的顺序如下7.1 用cmd删除安装目录打开管理员命令行进入Sangfor安装根目录cd /d C:\Program Files (x86)\Sangfor先列出当前目录内容dir确认Sangfor目录下除了PWE外没有其他还在用的组件比如如果你还装了Sangfor VPN客户端它可能也在同一个父目录下这时候不要整个父目录全删只删PWE子目录就行。确认无误后rd /s /q C:\Program Files (x86)\Sangfor\PWE带上/s参数会递归删除所有子目录和文件/q是安静模式不一个一个问你。执行后如果命令行没有任何回显说明删除成功。7.2 用通配符处理非标准目录有些版本的PWE安装路径比较野不装在Program Files下而是装在了C:\ProgramData\Sangfor C:\Windows\SysWOW64\Sangfor C:\Windows\System32\config\systemprofile\AppData\Local\Sangfor逐个检查这些位置有用的删掉没用的也删掉别手软。尤其是ProgramData下的很容易漏而且里面存了配置文件和缓存不删的话下次安装新版本可能直接读取旧配置导致安装出来的软件行为异常。7.3 处理“执行服务权限失败”和目录无法删除的问题我估计很多人搜索这个问题就是因为卡在删目录这一步弹一个“执行服务权限失败”或者“无法删除sangfor目录”的报错。原因通常是两个目录的ACL权限被PWE修改过默认的Everyone没有删除权限。有系统服务或进程还在访问这个目录。对应的处理思路如下。第一步先排查进程占用。用Process Explorer或者handle.exe搜索哪些进程打开了Sangfor目录下的文件搜到之后一个个结束进程。没有这些工具的话直接重启电脑进安全模式安全模式下一般不会有PWE的进程来抢文件锁。第二步重置目录权限。管理员命令行执行takeown /f C:\Program Files (x86)\Sangfor /r /d y icacls C:\Program Files (x86)\Sangfor /grant Administrators:F /t /c /qtakeown把目录所有者改成当前管理员组icacls再把完全控制权限授予管理员组这两个命令执行完再删绝大概率能成功。如果还是不行的用强删工具也行但我尽量不在这种场合推荐第三方工具因为安全软件残留场景下用强删工具有可能连系统关键文件一起遭殃。上面命令行的方式已经能覆盖绝大多数场景了。7.4 目录粉碎如果你真的遇到怎么都删不掉的文件网上的各种文件粉碎工具可以拿来应急但我个人的处理顺序是先takeown和icacls重置权限再尝试删除。如果删除仍失败不要硬删看看是不是文件被标记为系统文件受保护或者还有驱动没有释放文件句柄。安全模式下再来一轮基本能解决。我自己的经验是文件粉碎工具对普通文件有效但对仍被驱动持有的文件同样无力而且它可能会强制删除导致系统文件校验失败。所以能不依赖工具就不依赖工具把系统和进程处理好删除就是水到渠成的事情。8. 清理网络过滤驱动和WMI残留容易被忽视的暗雷PWE这类的终端安全组件除了服务、驱动、注册表这些常规位置它还会在网络过滤和WMIWindows Management Instrumentation里留下痕迹。这一块清理不完整后面你装新的安全软件可能会遇到“网络驱动不兼容”、“策略下发失败”之类的问题。8.1 网络过滤驱动清理前面提过fltmc这个命令它能列出当前系统的微过滤驱动列表。PWE的过滤驱动如果还在列表里先用fltmc unbind解除绑定fltmc unbind PWE_NdisMonitor fltmc unbind sangfor_filter如果提示找不到指定的altitude之类的报错说明驱动已经被移除了不用管。如果确认还在解除绑定之后再去drivers目录删.sys文件比直接硬删稳妥得多。8.2 WMI事件订阅清理WMI这块最常见的问题是安全软件会注册WMI事件过滤器用来监控系统某些关键行为甚至是自动拉起进程。如果你卸载完软件WMI里还残留这些规则系统会出现一些莫名其妙的行为比如某进程无故被启动、某服务无故被停止。先打开WMI管理工具WinR输入wmimgmt.msc打开后右键“WMI控件(本地)”选择“属性”再点“安全”页签这里能看到各个命名空间的安全设置但要看事件订阅的话需要在命令行里操作wmic /namespace:\\root\subscription path __EventConsumer WHERE Name LIKE %Sangfor% OR Name LIKE %PWE% OR Name LIKE %SAIO% get Name,ScriptText没输出就是没有残留有输出的话用命令行删除wmic /namespace:\\root\subscription path __EventConsumer WHERE Name LIKE %Sangfor% DELETE操作步骤繁琐但有时间的话建议做一次。我处理的那台机器上WMI过滤器还带了一个PowerShell脚本订阅每30秒检测一次某个Sangfor服务是否存在不存在就尝试拉起。这个是真没想到清理了之后世界安静了。8.3 防火墙规则清理PWE在安装时会往Windows防火墙里写入若干条放行规则。软件卸载后规则不删等于开着防火墙后门。查看并删除的路径是控制面板\系统和安全\Windows Defender 防火墙\高级设置\入站规则筛选“Sangfor”或“PWE”关键字看到相关规则就删除。出站规则同理。如果你是用命令行操作的可以这样列出netsh advfirewall firewall show rule nameall | findstr /i sangfor pwe saio找到对应的规则名之后删除命令格式如下netsh advfirewall firewall delete rule name规则名称有些规则的名称不是以Sangfor开头的而是类似“Allow Sangfor Service Communication”这种半英文半品牌的组合搜索的时候注意用模糊关键词。9. 重新启动系统验证是否清理干净最后把所有残留项都清理完之后重启系统。重启后按下面步骤验证服务列表里搜索Sangfor、PWE、SAIO应该一个都搜不到。任务管理器里没有相关进程。系统盘里所有Sangfor目录都不存在包括Program Files下的、ProgramData下的、Windows\System32\drivers下的sys文件。注册表里Services、Run、AppInit_DLLs这几处没有启动项。打开设备管理器查看“非即插即用驱动程序”里面没有Sangfor或PWE相关的驱动。运行driverquery输出列表里没有相关键值。运行fltmcFilter列表里没有相关过滤驱动。之前被PWE占用的网络端口比如它和管控中心通信的端口也能正常被其他服务使用。9.1 重启之后再补一遍这里有一个经验要分享即便你在当前系统下删除了所有能看见的文件重启之后仍有可能发现个别文件被重新创建尤其是安装目录下的配置缓存文件。如果你确认服务、驱动、WMI清理干净了大概率不会再被拉起但如果是残留的某个服务在重启时自愈了那就会出现“删完又活了”的假象这种情况下回到第4和第5步重点检查服务的Start值和驱动的加载情况。我当时在重启之后发现C:\ProgramData\Sangfor目录又出现了一个小配置文件检查发现来源是注册表里一个我漏掉的RunOnce键。删掉之后就彻底干净了。所以如果条件允许清理完当天可以到晚上再重启一次把“伪装成系统组件的所有进程”这个问题留到第二天一并处理很省事。9.2 用火绒剑或Autoruns做全盘自启动项扫描如果你对这个不放心可以再下载一个Autoruns微软官方工具做一次启动项全量扫描。它在“Everything”页签下会列出注册表启动项、计划任务、服务、驱动、WMI事件订阅等所有开机自启项目把仍带有Sangfor、PWE、SAIO关键词的条目手动禁用删除。Autoruns的好处是它能看到普通工具看不到的地方比如Boot Execute、Image Hijacks、AppInit这些都很适合用来查安全软件的深层残留。如果连Autoruns里都搜不到Sangfor相关条目了那这波清理算是真正结束了。10. 一些题外话给企业和个人用户的两点建议个人电脑上安装过的安全组件卸载不干净会越用越卡所以在卸载之前建议进控制面板的“程序和功能”里先检查该软件版本顺带记住安装路径。企业环境下则是另一码事如果终端软件是IT部门统一下发的最好不要自己手动去删。最省心的方式是联系IT管理员让控制台做远程卸载。控制台远程卸载会先解除各种保护策略然后再调起卸载程序比自己手动在终端上操作干净得多。我这几台机器之所以会手动卸载是因为机器已经脱离了原管控网络控制台这边根本连不上只能本地一步步清。这种情况下本文这套流程就非常有用了。另外我自己试过在卸载完Sangfor PWE后安装驱动时遇到网络过滤器冲突的问题后来发现是之前PWE的残留驱动没有清干净导致。所以如果你卸载完成后马上要装其他的安全软件或者网络过滤驱动建议清完重启之后再装不要在卸载完成后立刻安装新软件避免新旧驱程在同一时刻加载导致蓝屏。11. 最后Sangfor PWE的卸载过程总体可以归纳成四步卸载主程序、停服务清驱动、清注册表和计划任务、删目录文件。前两步做扎实了后两步基本就是顺手的事。难点在于它组件多、隐藏深总是以为删完了翻一翻又冒出来一个残留项。我个人实际操作下来最深的体会是不要试图省掉重启这一步也不要跳着步骤来。每完成一个阶段就重启一次系统能让整个清理过程更有条理排查起问题来也明确——重启后出现了什么就是上一个阶段漏了什么。这套思路不光适用于Sangfor PWE你换成其他任何卸载不干净的国产终端软件基本都是同一个套路。如果你目前也被这个问题卡着希望这篇记录能帮你少走一点弯路。
