DriverStore Explorer 驱动清理指南:决定哪些驱动被勾选的3条判断规则
【免费下载链接】DriverStoreExplorerDriver Store Explorer项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer
Windows 的 Driver Store 只进不出,驱动包越堆越多,C 盘空间被一点点吃掉。DriverStore Explorer(RAPR)是一个查看和清理 Windows 驱动仓库的开源工具:它把系统里每个第三方驱动包列出来,显示版本、大小、关联设备,支持批量删除旧驱动、按目录结构导出备份。
程序是一个单文件Rapr.exe,需要 Windows 7 以上、.NET Framework 4.7.2 以上,并以管理员身份运行。主界面左边是驱动列表,右边是操作面板,最常用的两个按钮是Select Old Drivers和Delete Driver。它敢一键勾选,底气来自源码里几条明确的判断规则。
截图里那条 813 MB 的 NVIDIA 驱动,Device Name 列显示为灰色——这正是判断一个驱动能不能删的第一条线索。
先看列表里两种颜色:灰色与橙红色是怎么来的
Device Name列的灰色不是装饰。DSEForm.cs的LstDriverStoreEntries_FormatCell事件里写得很直白:当entry.DevicePresent为false时,单元格前景色设为Color.Gray。
DevicePresent的数据源在DeviceHelper.cs,那里定义了DEVPKEY_Device_IsPresent属性键,SetupAPI.cs负责从 Windows 设备栈读取它。设备当前不在位(拔掉的外置摄像头、退役的打印机、旧手机)对应驱动就是灰色。删掉灰色设备对应的驱动,当前使用不受影响;代价是日后再接上这台设备,要重新装驱动。
第二种颜色在Driver Date列:橙红色(Color.OrangeRed)。DSEForm.cs维护一个driversWithNewerDate集合,版本较低但日期反而比最新版本更新的驱动包会进入其中。版本号排序和文件日期排序打架时,用颜色提醒你再确认一下。
一键「Select Old Drivers」驱动清理背后的3条规则
这个按钮对应DSEForm.cs的CtxMenuSelectOldDrivers_Click方法。勾选逻辑可以拆成三条规则。
规则1:按4个维度分组,只有一组里存在多个版本才有资格被标记
驱动包先按DriverClass、DriverExtensionId、DriverPkgProvider、DriverInfName四个字段GroupBy,再按DriverVersion、DriverDate双重排序,只保留组内版本数大于 1 的组。系统里只有一个版本的驱动,永远不会被自动勾选。
规则2:版本号排第一,日期只是次序比较
组内按版本号降序、日期降序排列后,排第一的版本保留,Skip(1)之后的全部标记为旧。注意:日期比新版更新的旧版本仍会被勾选(同时被橙红色标记),判断基准始终是版本号。
规则3:两道安全闸,默认排除关键驱动
第一道:设置项IncludeBootCriticalInOldDriverSelection默认是False(见Properties/Settings.settings),被标记为启动关键的驱动包直接不参与自动勾选。第二道:HasDeviceAssociation为真的版本组不勾选——也就是说,当前还有设备正挂在它身上的驱动,自动清理不会碰。ntprint.inf也被显式排除在外。
Select Unused Driver(s)走的是另一套更激进的逻辑:凡是HasDeviceAssociation为假的都勾上。它默认会先弹警告框,且默认按钮是 Cancel(MessageBoxDefaultButton.Button2),状态栏还会挂一条黄色提醒,直到这些驱动成功Export备份才清除。删除正在使用中的驱动则依赖Force Deletion复选框,官方说明里提到它对打印驱动可能不生效。
原生 API 不可用时,DriverStoreFactory.cs 如何自动切换引擎
驱动仓库有三套读取通道,都实现同一个IDriverStore接口:NativeDriverStore走 Windows Setup API 的 P/Invoke 调用(SetupAPI.cs、SafeNativeMethods.cs),DismUtil走 DISM 接口,PnpUtil则是解析pnputil.exe的命令行输出。DriverStoreFactory.cs的CreateOnlineDriverStore按设置项DriverStoreOption创建对应实现;ValidateDriverStoreOption负责降级——Native 不可用时,Windows 8 以上且有 DISM 就切到 DISM,否则落到 PnpUtil。
离线仓库走CreateOfflineDriverStore,此时 PnpUtil 分支也返回DismUtil,因为解析命令行输出无法处理挂载镜像。切到离线模式(ChooseDriverStore.cs里的 Offline 选项)后,两个自动勾选按钮会被禁用——设备是否在位无法确定,只能手动选择删除。
备份这条线同样有代码可查:DriverStoreEntry.cs的GetDriversBackupFolderName方法按「设备类别\设备名_版本」生成目录,没有关联设备的驱动归入Drivers without existing device;CSVExporter.cs实现IExport接口,把 15 个字段导出成 CSV,唯独不导出文件列表——源码注释里说明,单个显卡驱动包能列出一万多条文件,远超一个 Excel 单元格的上限。
最小动作,三步就能跑完一次 DriverStore Explorer 驱动清理:
- 下载最新版
Rapr.exe,或在 PowerShell 执行winget install lostindark.DriverStoreExplorer;想自己编译,git clone https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer后用 Visual Studio 2022 打开Rapr.sln构建。 - 右键以管理员身份运行,等列表加载完成。
- 点Select Old Drivers,逐行扫一遍勾选项,再点Delete Driver。
被勾中的,是代码判定「有更新版本、且没有设备在用」的驱动;判断依据都摆在DSEForm.cs里,不放心就先Export Drivers存一份再动手。
【免费下载链接】DriverStoreExplorerDriver Store Explorer项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考