先交代一下背景:我手上有几台办公电脑装了深信服的那套终端安全组件,就是Sangfor EDR配套的PWE(我理解是终端防护的准入或者安全客户端组件)。最近因为项目调整,需要把这套东西从机器里彻底清掉,换成另外一套终端管理方案。本来以为就是个普通卸载,结果一顿操作下来发现事情没那么简单——卸载程序走完进度条,目录照样躺在C盘里,服务在服务管理器里消失得干干净净,注册表里却还有一堆残留项,最烦的是,第二次想补刀删除残留目录的时候,系统直接弹“执行服务权限失败”,整个目录怎么都删不掉。
这篇就记录一下我完整删除Sangfor PWE的过程,以及踩过的坑和最终的解决方案。给遇到同样麻烦的朋友一个参考。
1. 动手之前先搞明白:为什么Sangfor PWE这么难删
先说清楚PWE是什么。Sangfor的终端管理套件里,PWE算是比较底层的一个服务组件,负责跟EDR控制台通信、下发策略、做准入检查这些事情。它不像普通软件那样一个exe装完就完事,而是会拆成好几个服务进程,分散在系统各个位置,并且和系统驱动层有交互。
这种设计带来的一个直接后果就是:如果你只用常规手段去卸载,比如控制面板里的“卸载程序”,或者直接shift+delete删目录,基本都会失败。
原因有这么几条:
- 自我保护机制。安全软件普遍有自保护,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这些关键词的服务。
我当时看到的情况是这样几个服务还在:
| 服务名称 | 显示名称 | 状态 |
|---|---|---|
| SangforSvc | Sangfor Service | 正在运行 |
| SAIO_Svc | Sangfor AIO Service | 已停止 |
| PWE_Svc | PWE Client Service | 正在运行 |
| SangforEDR | Sangfor 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*.exe
- Sangfor*.exe
- SAIO*.exe
- EDR*.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这类的终端安全组件,除了服务、驱动、注册表这些常规位置,它还会在网络过滤和WMI(Windows 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管理工具,Win+R输入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 name=all | 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,输出列表里没有相关键值。 - 运行
fltmc,Filter列表里没有相关过滤驱动。
之前被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,你换成其他任何卸载不干净的国产终端软件,基本都是同一个套路。
如果你目前也被这个问题卡着,希望这篇记录能帮你少走一点弯路。