news 2026/9/9 16:55:44

系统卸载不掉自身?Windows组件卸载机制解析与修复实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
系统卸载不掉自身?Windows组件卸载机制解析与修复实战

“系统不能卸载系统自己”——第一次看到这个描述,很多人会以为是个程序员段子。但如果你真的维护过企业终端、做过软件分发,或者只是帮同事处理过“卸载不干净”的电脑,就会明白:这类 bug 在 Windows 生态里不仅真实存在,而且常常不是单个故障,而是一整条保护链。

一个最典型的场景是这样的:某安全软件或系统组件被设计成“保护自身不被破坏”。你点卸载,它弹窗确认;你确认之后,它删掉了自己的大部分文件,但核心驱动和服务还在运行;等你重启,它又自愈恢复。更极端的版本则是:卸载程序本身还在运行,而运行中的 exe 文件被系统锁定,导致“自己删自己”永远失败。本文要讲的,就是这一类“系统无法卸载系统组件”问题的完整排查与修复思路。

我会从 Windows 的卸载机制、文件锁、服务依赖、注册表残留和安全保护五个层面展开,给出可直接复制运行的 PowerShell 脚本和命令行过程,并说明哪些操作必须在安全模式下做、哪些操作只适合在自己有授权的机器上执行。读完你至少能做到三件事:定位卸载失败的真实环节;手工完成一次“链路式”清理;在遇到卸载后自动复活时找到正确的对抗顺序。

1. 这篇文章真正要解决的问题

先给结论:所谓“系统不能卸载系统自己的 bug”,真正的技术难点不是删除文件本身,而是解除运行中进程对文件的占用、停止自我保护型服务的自愈逻辑、清理带有特殊 ACL 的注册表项,以及处理 Windows 安装器(MSI)的残留状态

如果你只是遇到一个普通软件卸载不了,那通常一句话就能解决:去安全模式,直接删。但“系统自己的组件”不是这样,它有一个天然优势:修改自身的进程往往具有 SYSTEM 或 TrustedInstaller 权限,普通管理员都改不动它。加上 Windows 自带的“文件保护”和第三方安全软件的“自保驱动”,就形成了三层防护:

  1. 运行锁:正在运行的进程文件无法被直接覆盖或删除。
  2. 权限墙:系统组件文件、注册表项的属主和 ACL 被设置为仅允许 TrustedInstaller / SYSTEM 写入。
  3. 自愈机制:删除后,守护服务会通过备份副本、安装缓存或云策略重新拉回文件。

所以这类问题不能靠“暴力删目录”解决。你要做的是按顺序拆掉这三层防护。这篇文章解决的核心问题就是:如何在不重装系统的前提下,通过诊断、降权、隔离启动和注册表清理,完成一次彻底卸载,并且防止它复活。

适合阅读本文的读者有三类:桌面运维和 IT 支持工程师;被各种“卸载残留”困扰的普通开发者;以及需要设计自家软件卸载流程的客户端开发人员。如果你属于第三种,建议重点看第 8 节,里面关于“卸载器设计”的建议能帮你直接躲开这类 bug。

2. 基础概念:一次正常的软件卸载到底做了什么

很多人在排查卸载问题时,习惯双击“卸载”按钮,等待弹窗消失,然后看目录是否还在。这个思路的问题在于:它把卸载当成了一次性操作,实际上卸载是一个由多环节组成的“事务”。

一次正常卸载至少包含四个步骤:

环节具体操作失败后果
终止进程与服务结束后台进程、停止并删除 Windows 服务文件被占用,目录删不掉
删除文件删除安装目录、公共数据目录、缓存文件残留垃圾文件
清理注册表删除卸载入口、启动项、文件关联、COM 组件、服务键设置面板残留、开机报错
清理计划任务与驱动删除计划任务、内核驱动设备节点驱动服务开机失败

其中 Windows Installer(MSI)体系的软件还有第五个隐藏环节:产品记录。MSI 会在注册表里维护一条产品注册记录,当系统认为该产品“仍处于已安装状态”时,即使文件被删了,控制面板里依然能看到条目,点击卸载则可能直接报错“找不到指定的产品”。

“系统不能卸载系统自己”这类 bug,通常就是在上述多个环节同时出错。比如:

  • 卸载入口指向的UninstallString命令已经不存在;
  • 服务设置为“受保护”,Stop-Service失败;
  • 安装目录的文件句柄被系统进程占用;
  • 卸载后注册表清理不完整,导致系统把“已删除”误判为“已安装”。

理解了这一点,你就明白为什么很多“卸载工具”在用户眼中很神奇:它们本质上只是把上述四个环节拆开,逐个执行,并且在每个环节之间加入重启和重新检测。我们自己排查时,也可以用同样的思路。

3. 环境准备与前置条件

在动手清理之前,必须明确边界:本文的清理方法仅适用于你在自己拥有管理权限的设备上、针对具备合法授权卸载的软件进行操作。不建议也不应当用类似方式绕过企业安全策略、破解安全软件自我保护或删除系统关键组件。

正式操作前,建议完成以下准备:

  • 操作系统:Windows 10 / Windows 11 均可,本文命令兼容 PowerShell 5.1 及以上。
  • 权限:准备一个管理员账号。绝大多数卸载修复操作需要“以管理员身份运行”终端。
  • 备份与恢复点:先创建系统还原点。这是成本最低的安全网。
  • 外部介质:准备一个 PE 启动盘或系统安装 U 盘,用于最极端情况下的应急。
  • 术语确认:下文提到的“目标软件”一律指你要卸载的那个程序;“系统组件”指它注册在系统层的服务、驱动或受保护文件。

创建还原点的命令如下(PowerShell):

# 以管理员身份运行 Checkpoint-Computer -Description "BeforeUninstallFix" -RestorePointType MODIFY_SETTINGS

如果系统提示“无法创建还原点”,检查一下系统保护是否开启:

Enable-ComputerRestore -Drive "C:\"

环境准备阶段最容易踩的坑不是命令写错,而是把当前用户的“卸载入口”当成本机唯一的卸载记录。Windows 实际存在多份卸载列表,分别在 64 位、32 位、当前用户三个注册表位置。排查时必须全部查一遍,否则会出现“明明在设置里看到软件,但脚本查不到”的困惑。

4. 核心流程拆解:先定位,再动手

修复“系统不能卸载自己”的错误做法是:找到目录,右键删除。正确做法是:先回答四个问题,再决定下一步动作。

4.1 问题一:目标软件是 MSI 安装的还是普通程序?

打开 PowerShell,执行下方命令,枚举本机全部卸载入口:

# 文件路径:直接在 PowerShell 执行,无需要保存 $paths = @( 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' ) Get-ItemProperty $paths -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName } | Select-Object DisplayName, DisplayVersion, UninstallString, PSChildName | Sort-Object DisplayName | Format-Table -AutoSize

输出结果中,PSChildName如果是{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}格式,说明这是 MSI 产品,真正的卸载命令应该用msiexec /x {GUID}而不是调用UninstallString。这是很多人第一步就出错的地方。

如果目标软件的卸载命令包含/quiet--uninstall这类参数,说明它是 NSIS、Inno Setup 或自定义安装器,清理重点会更多落在注册表和文件上。

4.2 问题二:它注册了哪些服务、驱动和计划任务?

服务是“卸载后复活”最常见的源头。查询服务状态:

# 查询名称包含关键字的服务,替换 Demo 为实际关键字 Get-CimInstance Win32_Service | Where-Object { $_.Name -like '*Demo*' -or $_.DisplayName -like '*Demo*' } | Select-Object Name, State, StartMode, PathName | Format-List

查询驱动:

Get-CimInstance Win32_SystemDriver | Where-Object { $_.Name -like '*Demo*' -or $_.DisplayName -like '*Demo*' } | Select-Object Name, State, StartMode, PathName | Format-List

查询计划任务:

Get-ScheduledTask | Where-Object { $_.TaskName -like '*Demo*' -or $_.TaskPath -like '*Demo*' }

这一步的目标是确认是否存在“守护型”服务或驱动。只要发现它的 StartMode 是Auto且带有“失败后重启服务”的恢复配置,就必须在卸载前先处理掉。

4.3 问题三:哪些文件被锁定了?

文件删不掉时,不要反复试。先用命令探测占用:

# 使用 Sysinternals handle 工具,需先下载到本机 handle.exe -a "C:\Program Files\DemoDir"

如果没有 Sysinternals 工具,也可以直接重启到安全模式再看。安全模式下大部分第三方服务和驱动不加载,文件锁会少很多。通常我建议:先在普通模式查清结构和注册表,再进安全模式做真正的删除操作。

4.4 问题四:是否存在“卸载入口残留”?

如果设置面板里能看到条目,但点击后报错,或者UninstallString指向的文件不存在,说明卸载入口是残留的。此时不要直接删注册表——如果它是 MSI 产品,最干净的方式是在系统还认这个产品时用msiexec /x强制卸载:

msiexec /x {GUID} /qn /l*v C:\logs\uninstall.log

如果 MSI 产品记录已损坏,这个命令会失败。这时只能先清除注册表和安装目录,再处理产品记录。

5. 完整脚本:卸载失败后的手工处理示例

下面给出一套可复制的 PowerShell + CMD 组合操作。请把示例中的Demo替换为你的实际软件名,GUID替换为真实产品代码。所有命令都以管理员身份运行。

5.1 先导出注册表备份

# 备份卸载入口,防止误删后无法回滚 $backupPath = 'D:\UninstallBackup' New-Item -ItemType Directory -Path $backupPath -Force | Out-Null reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Demo" "$backupPath\uninstall64.reg" /y reg export "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Demo" "$backupPath\uninstall32.reg" /y reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Demo" "$backupPath\uninstallUser.reg" /y

5.2 停止并删除服务、卸载驱动

# 停止目标服务 Stop-Service -Name "DemoService" -Force -ErrorAction SilentlyContinue # 将服务启动类型改为禁用,防止开机拉活 Set-Service -Name "DemoService" -StartupType Disabled -ErrorAction SilentlyContinue # 删除服务(在确认服务属于目标软件后执行) sc.exe delete DemoService # 删除内核驱动(示例驱动名为 DemoDriver) sc.exe stop DemoDriver sc.exe delete DemoDriver

这里要特别注意:如果目标软件有自我保护驱动,sc delete很可能返回拒绝访问或“指定的服务未安装”。这通常是正常的,因为自我保护驱动在运行时会拦截对自身服务句柄的删除操作。正确顺序是:先进安全模式,再执行上面的删除。

5.3 使用 Windows Installer 清理 MSI 产品

:: 强制卸载 MSI 产品,并输出详细日志 msiexec /x {8D6C2D0A-9A3E-4F2B-9A0E-2C5D8D4F6A12} /qn /l*v D:\logs\demo-msi-uninstall.log :: 如果上面的命令失败,尝试“重新登记后卸载” msiexec /fv {8D6C2D0A-9A3E-4F2B-9A0E-2C5D8D4F6A12}

/fv参数会根据缓存重新修复产品记录,有时能恢复损坏的 MSI 状态,让后续卸载可以正常执行。

5.4 处理“运行中文件无法删除”的问题

如果文件被某个服务占用,且该服务在安全模式下也无法停止(极少数情况),可以注册“重启后删除”。Windows 提供MoveFileEx接口,配合MOVEFILE_DELAY_UNTIL_REBOOT标记,可以在下次启动的早期阶段、在占用方加载之前删除文件。下面是一个完整的 C# 工具类:

// 文件路径:Demo/FileDeleteUtil.cs using System; using System.ComponentModel; using System.Runtime.InteropServices; public static class FileDeleteUtil { [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] private static extern bool MoveFileEx( string lpExistingFileName, string lpNewFileName, int dwFlags); private const int MOVEFILE_DELAY_UNTIL_REBOOT = 0x4; private const int MOVEFILE_REPLACE_EXISTING = 0x1; public static void DeleteFileAfterReboot(string filePath) { if (!MoveFileEx(filePath, null, MOVEFILE_DELAY_UNTIL_REBOOT)) { int err = Marshal.GetLastWin32Error(); throw new Win32Exception(err, "无法计划重启后删除: " + filePath); } } }

调用方式:

// 文件路径:Demo/Program.cs public class Program { public static void Main(string[] args) { FileDeleteUtil.DeleteFileAfterReboot(@"C:\Program Files\Demo\DemoCore.dll"); Console.WriteLine("计划成功,重启后自动删除。"); } }

这个方式同样适用于清理普通软件“卸载删不掉”的 DLL。但要注意,它只能用来删除普通文件,不能用于删除内核驱动镜像,因为驱动文件在启动早期会被内核加载,删除时机仍然可能晚于驱动加载。对于驱动,必须从服务端删除启动加载项后再处理文件。

5.5 清理启动项和计划任务

# 删除当前用户的 Run 启动项 Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Demo" -ErrorAction SilentlyContinue # 删除本机 Run 启动项 Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -Name "Demo" -ErrorAction SilentlyContinue # 删除计划任务 Unregister-ScheduledTask -TaskName "DemoTask" -Confirm:$false

5.6 删除安装目录

@echo off rem 以管理员身份运行 taskkill /F /IM DemoApp.exe rd /s /q "C:\Program Files\Demo" rd /s /q "%ProgramData%\Demo" rd /s /q "%AppData%\Demo" exit /b 0

如果rd提示文件被占用,不要硬删。重启到安全模式后再执行一次。安全模式是处理文件占用问题的“银弹”,但前提是你已经停掉了它的驱动服务。

6. 运行结果与效果验证

清理完成后,不能只看目录消失就宣布成功。建议按以下清单逐项验证:

# 1. 验证服务不存在 Get-Service -Name "DemoService" -ErrorAction SilentlyContinue # 2. 验证驱动不存在 Get-CimInstance Win32_SystemDriver -Filter "Name='DemoDriver'" -ErrorAction SilentlyContinue # 3. 验证卸载入口不存在 Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Demo" # 4. 验证安装目录不存在 Test-Path "C:\Program Files\Demo" # 5. 验证计划任务不存在 Get-ScheduledTask -TaskName "DemoTask" -ErrorAction SilentlyContinue

如果上述命令全部没有输出或返回False,说明表面清理完成。但这还不够,还需要一个“重启验证”:

  1. 重启电脑;
  2. 打开“设置 → 应用 → 已安装的应用”,确认列表中没有目标软件;
  3. 打开“任务管理器 → 启动”,确认没有相关启动项;
  4. 观察系统事件日志中是否有该软件驱动的错误记录。

如果重启后目录又出现、服务又恢复,说明存在自愈机制。这类机制通常藏在三个地方:

  • 计划任务:某个隐藏任务在登录时触发修复脚本;
  • Windows 服务恢复选项:服务失败后自动重启并修复组件;
  • 备份副本:安装目录之外的隐藏备份,例如C:\ProgramData\Demo\Backup

继续检查事件日志是定位自愈来源最有效的方式:

Get-WinEvent -FilterHashtable @{LogName='Application'; Level=4; StartTime=(Get-Date).AddDays(-1)} -MaxEvents 50 | Where-Object { $_.Message -like '*Demo*' } | Select-Object TimeCreated, ProviderName, Message | Format-List

如果确认是某个高权限服务在守护,最稳妥的方案不是“边删边防”,而是进 WinRE(Windows 恢复环境)或安全模式,在它没启动的时候连根移除。

7. 常见问题与排查思路

下表汇总了“系统组件/软件卸载不掉”场景中最高频的几种问题,解决方向按推荐优先级排列。

问题现象可能原因排查方式解决方案
卸载时报“文件正在使用”后台进程或系统服务占用了 DLL/EXE用 Process Explorer 或 handle.exe 查句柄结束进程;或使用 MoveFileEx 计划重启后删除
卸载后目录自动恢复守护服务、计划任务或云策略拉回文件查服务、计划任务、事件日志中的修复行为安全模式下停止并删除服务,再删除文件和计划任务
设置面板残留但卸载报错注册表卸载入口残留或 MSI 产品记录损坏查看 UninstallString 是否存在文件用 msiexec /x {GUID};损坏时清理注册表入口
提示“需要管理员权限”但已是管理员目标文件/注册表属主是 SYSTEM 或 TrustedInstaller查看文件属主和 ACL安全模式 + 获取所有权后清理,或使用 PE 环境处理
停服务失败,返回“拒绝访问”自我保护驱动拦截服务控制请求检查服务名称与驱动状态不硬拼权限;重启进安全模式再停止删除
PowerShell 提示禁止运行脚本系统执行策略默认 Restricted执行 Get-ExecutionPolicy 查看以管理员运行 Set-ExecutionPolicy RemoteSigned 后重试
MSI 卸载返回 1719 或 1603Windows Installer 服务异常或产品状态损坏检查 Windows Installer 服务状态重启 Windows Installer 服务或使用 MSI 清理工具

这里要特别说明 PowerShell 执行策略问题。很多读者拿到脚本后发现无法运行,报错形如“无法加载文件 ... npm.ps1,因为在此系统上禁止运行脚本”,这是执行策略限制导致的。自己写脚本可以这样处理:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

但不要为了图方便设置成UnrestrictedRemoteSigned的规则是:本机脚本可以运行,从网络下载的未签名脚本需要签名或解除“Zone.Identifier”。这已经能覆盖绝大多数个人脚本场景,同时保留了基本的安全边界。

另一个高频问题来自管理员权限没有真正提升。如果你是在普通 PowerShell 窗口里执行Stop-Service,即使当前账号是管理员,也会因为 UAC 未提升而操作失败。务必使用“以管理员身份运行”打开终端。

8. 最佳实践与工程建议

处理“系统不能卸载系统自己”这类问题,最有价值的收获不是记住某条命令,而是建立一套正确的卸载产品设计和运维清理规范。

8.1 给软件开发者的建议:让卸载器“可自删”

很多“卸载不掉”的 bug,其实是安装包设计者埋下的雷。如果一个卸载器进程位于安装目录内,它在运行时就无法删除自己的 EXE 和 DLL,这就是最原始的“不能卸载自己” bug。

推荐三种工程解法:

  1. 卸载时复制到临时目录再运行:卸载器先把自己复制到%TEMP%,退出主程序后从临时副本执行删除逻辑,最后删除临时副本。
  2. 使用延迟删除机制:对于无法在卸载时删除的文件,调用MoveFileEx(..., MOVEFILE_DELAY_UNTIL_REBOOT)注册重启后删除,并在卸载日志里标记。
  3. MSI 产品的删除路径必须可靠:不要在UninstallString里直接写一个会删除自身的批处理脚本;应使用标准msiexec /x驱动,配合RemoveFileRemoveRegistry表项完成清理。

还要注意:卸载器要有“失败可重入”设计。如果第一次卸载到一半失败,第二次运行卸载器时应该能继续完成剩余步骤,而不是因为找不到第一个临时文件而直接整体失败。

8.2 给运维和终端管理者的建议:卸载前先做“三查”

对上规模的终端环境,我建议把卸载操作标准化,不要遇到问题就手工删注册表。三查是指:

  • 查进程树与句柄;
  • 查服务、驱动、计划任务的完全列表;
  • 查注册表卸载入口和文件关联。

标准化操作可以在设备上留下审计日志,避免因为误删导致系统异常。对多台设备批量操作时,优先使用企业软件分发工具的卸载通道,或通过策略下发卸载脚本,而不是逐台远程操作。

8.3 关于第三方卸载工具的使用边界

市面上的卸载工具(包括系统优化软件自带的“强力卸载”)本质上是在做同样的事:先扫描服务和驱动,再关停进程,再删除文件和注册表。它们的价值在于自动化,但风险也在此。尤其是那些宣称能“卸载安全软件”“清理系统组件”的工具,一旦误判关键组件,可能导致系统无法启动。

更稳妥的判断是:普通软件可以用卸载工具加速清理;带自我保护的安全软件,必须使用厂商提供的官方卸载程序;系统关键组件(例如输入法框架、显卡驱动、运行库)优先使用官方安装包自带的卸载入口,或专用的官方清理工具。例如显卡驱动卸载,业内常用 DDU 在安全模式下执行,是因为它需要避开驱动加载过程,而不是因为它能强删文件。

8.4 安全边界提醒

清理“卸载不掉”的软件时,不要为了达成目的而关闭 Windows Defender、绕过 UAC、强制结束关键系统进程。出现“删不掉”时,优先反思是不是自己的删除顺序错了,而不是系统故意阻止你。系统层面的拒绝,本质是权限和信任边界的体现。正确做法是找到合法通道,例如:

  • 到“设置 → 应用”中使用标准卸载;
  • 使用厂商官方卸载工具;
  • 在安全模式或 WinRE 中操作;
  • 联系软件厂商获取专用清理工具。

9. 总结与后续学习方向

“系统不能卸载系统自己”这个看似玩笑的 bug,拆开来看,是运行锁、权限墙、自愈机制、注册表残留四个问题的组合。修复的关键不是更用力地删除,而是更正确地排序:先备份,再停服务,再处理驱动,再清理文件和注册表;遇到锁就进安全模式,遇到自愈就先找守护源。这个思路适用于 90% 以上的卸载失败场景,无论是普通软件、数据库中间件、显卡驱动还是带自我保护的安全软件。

如果你希望继续深入,建议按三个方向延伸学习:

  • Windows Installer 体系:学习 MSI 的表结构和日志分析,能让你在处理“控制面板残留”时不再靠猜。
  • Windows 安全模型:理解 TrustedInstaller、ACL、Token 之间的关系,很多“明明管理员也删不掉”的问题会迎刃而解。
  • 软件打包与卸载设计:站在开发者角度重新设计安装包,从源头避免“卸载器无法自删”这类结构性问题。

最后提醒一句:遇到解决不了的卸载问题,优先保存卸载日志、事件日志和注册表备份,而不是反复尝试暴力删除。数据比“删干净”更重要。格式化重装永远是最后手段,但也是最干净的手段——前提是你确认这台设备上的数据已经全部备份。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 16:55:02

PyTorch实战:从零构建全连接与卷积网络识别MNIST手写数字

我先把话说在前头:这篇不是那种“复制粘贴就能跑”的仓库式教程,也不是把几十行代码堆出来就完事。我会从零开始,把“全连接网络”和“卷积网络”各自的原理、为什么这么设计、每一步代码在做什么,全部拆开揉碎,附上可…

作者头像 李华
网站建设 2026/9/9 16:54:46

ObjectARX自定义实体开发完整指南:从序列化到调试

简介:面向AutoCAD二次开发者的ObjectARX自定义实体入门实例,基于VC环境,通过从AcDbLine派生自定义直线实体,完整演示自定义实体从项目创建、类定义、DWG/DXF序列化、worldDraw绘制、数据库注册到命令调用与调试的流程。压缩包共70…

作者头像 李华
网站建设 2026/9/9 16:54:32

WSABuilds 完全指南:WSA 停服后 5 步装好 Windows 安卓子系统

WSABuilds 完全指南:WSA 停服后 5 步装好 Windows 安卓子系统 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (r…

作者头像 李华
网站建设 2026/9/9 16:53:45

官方停止维护后,WSABuilds 让你在 Windows 上继续跑安卓子系统

官方停止维护后,WSABuilds 让你在 Windows 上继续跑安卓子系统 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (…

作者头像 李华
网站建设 2026/9/9 16:53:22

DSDV路由协议源码中文注释解析:从序列号机制到工程实现

简介:面向网络协议学习者和无线网络研究人员的DSDV路由协议NS2实现源码,以C编写并配有中文注释,便于从代码层面理解距离向量算法、目的序列号防环机制,以及与NS2事件调度和数据包处理的集成方式。压缩包共6个文件,包含…

作者头像 李华