当时有在安装卸载程序没?
AI是这样解释的,不知道有没有道理。
C:\Config.Msi\7a99b00.rbf 这种路径,通常并不是某个“真实可执行程序”的长期所在位置,而是 Windows Installer(MSI)在安装/修复/更新软件过程中临时生成的回滚文件。
几个关键点:
C:\Config.Msi
这是 Windows Installer 使用的一个系统目录(默认隐藏、受保护)。
当 MSI 安装包在执行文件替换、升级、修复时,会把原始的可执行文件或 DLL 备份到这里,以便失败时可以回滚。
.rbf(Rollback File)
.rbf 即 Rollback File。
它是 MSI 为“可回退操作”准备的临时副本,内容通常就是原来的 exe/dll。
为什么你在 C# 中读到这个路径?
典型场景是:
某个程序正在被 安装、更新或修复;
Windows Installer 先把原 exe 移走,生成一个 .rbf 文件;
新版本尚未完全写回;
此时你用 Process.MainModule.FileName、GetModuleFileNameEx 等 API 查询该进程路径;
返回的就变成了 C:\Config.Msi\xxxx.rbf。
也就是说:
你看到的不是“这个程序本来就在 C:\Config.Msi”,而是 它正处于 MSI 的事务性安装过程中,当前运行映像来自回滚临时文件。
在进程监控、路径识别、白名单判断等场景中,这一点尤其容易造成误判。例如:
你原本期望得到
C:\Program Files\Foo\Foo.exe
却偶尔得到
C:\Config.Msi\7a99b00.rbf
这并不意味着程序“异常”,而是说明:
该程序刚刚被更新 / 修复;
或系统正在对它执行 MSI 事务操作;
你采样的时间点正好落在“替换窗口期”。
在工程实践中,常见处理方式包括:
对 C:\Config.Msi\*.rbf 做特殊判定;
延迟再次查询(例如 100–500ms 后重试);
结合 Process.Id、OriginalFileName、ProductName 等 PE 信息做归一化;
或在逻辑上将其映射回“原本的安装路径语义”。
在进程监控类系统(例如你现在做的 WPF/系统级工具)中,这种情况是系统级正常现象,而不是 API 错误。
退回了几个版本,发现也出现提示了。怀疑是不是有什么动作更新版本造成的?
打开这里看看,最近使用的动作里有没有什么动作可疑。