当前位置: 首页 > news >正文

使用 ProcessMonitor 找到进程所操作的文件的路径

很多系统问题都是可以修的,不需要重装系统,但是最近我还是重装了。发现之前正在玩的一款游戏的存档没有了……因为我原有系统的数据并没有删除,所以我还是能找回原来的游戏存档的。但是,我怎么知道这款游戏将存档放在了那个路径下呢?搜索当然是好方法,不过我喜欢玩的游戏大多是冷门游戏,有些搜不到。于是我就用 Process Monitor 找到了存档所在,恢复了我的游戏进度。

本文介绍如何使用 ProcessMonitor 找出进程创建和修改的文件路径。


本文内容

    • 下载 Process Monitor
    • 打开 Process Monitor
    • 设置过滤规则
    • 分析记录

下载 Process Monitor

Process Monitor 是微软极品工具箱的一部分,你可以在此页面下载:

  • Process Monitor - Windows Sysinternals - Microsoft Docs

打开 Process Monitor

当你一开始打开 Process Monitor 的时候,列表中会立刻刷出大量的进程的操作记录。这么多的记录会让我们找到目标进程操作的文件有些吃力,于是我们需要设置规则。

Process Monitor 的工具栏按钮并不多,而且我们这一次的目标只会用到其中的两个:

  • 清除列表(将已经记录的所有数据清空,便于聚焦到我们最关心的数据中)
  • 设置过滤器(防止大量无关的进程操作进入列表中干扰我们的查找)

Process Monitor 的工具栏按钮

设置过滤规则

我启动了我想要玩的游戏,在任务管理器中发现它的进程名称是 RIME.exe。呃……如果你也想玩,给你个链接:

  • RiME - Explore the beautiful yet rugged world of RiME

点击设置过滤规则按钮,可以看到下面的界面:

设置过滤器

可以选定 某个名词 与另一个字符串 进行某种操作 之后 引入 (Include)排除 (Exclude)

我希望找到 RIME 这款游戏的游戏存档位置,所以我需要进入游戏,玩到第一个会存档的地方之后观察监视的操作记录。

所以我希望的过滤器规则是:

  1. 将所有不是 RIME.exe 进程的记录全部排除;
  2. 将不是文件操作的记录全部排除;
  3. 将读文件的记录排除(这样剩下的只会是写文件,毕竟游戏读文件很频繁的)。

于是我设置了这些规则:

[ProcessName] is [RIME.exe]      then [Exclude]
[Operation]   is [RegOpenKey]    then [Exclude]
[Operation]   is [RegCloseKey]   then [Exclude]
[Operation]   is [RegQueryKey]   then [Exclude]
[Operation]   is [RegQueryValue] then [Exclude]
[Operation]   is [RegEnumKey]    then [Exclude]
[Operation]   is [RegSetInfoKey] then [Exclude]
[Operation]   is [ReadFile]      then [Exclude]

这样,剩下的记录将主要是文件写入以及一些不常见的操作了。

分析记录

现在,我在游戏里面玩到了第一个存档点,终于在 Process Monitor 的进程列表中看到了创建文件和写入文件相关的操作了。

记录的列表

通过观察 Path 的值,我可以知道 RIME 游戏的存档放在了 %LocalAppData%\SirenGame 文件夹下。

于是我关掉 RIME 游戏,将原来系统中的此文件夹覆盖到新系统中的此文件夹之后,再次打开游戏,我恢复了我的全部游戏存档了。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译
  • git 配置错误导致无法推送远端仓库?本文介绍各种修复方式
  • WPF 很少人知道的科技
  • WPF 程序的编译过程
  • 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)
  • .NET 的程序集加载上下文
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • Windows 10 解决无法完整下载安装语言包(日语输入法无法下载使用)
  • 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
  • 如何快速创建 Visual Studio 代码片段?
  • 从 git 的历史记录中彻底删除文件或文件夹
  • 如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • 如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI
  • JS 中的深拷贝与浅拷贝
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Docker容器管理
  • gitlab-ci配置详解(一)
  • GraphQL学习过程应该是这样的
  • JavaScript 一些 DOM 的知识点
  • Median of Two Sorted Arrays
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • 百度地图API标注+时间轴组件
  • 离散点最小(凸)包围边界查找
  • 前端技术周刊 2019-01-14:客户端存储
  • 三栏布局总结
  • 一天一个设计模式之JS实现——适配器模式
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​TypeScript都不会用,也敢说会前端?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #if 1...#endif
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (搬运以学习)flask 上下文的实现
  • (二)学习JVM —— 垃圾回收机制
  • (理论篇)httpmoudle和httphandler一览
  • (排序详解之 堆排序)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .Family_物联网
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net Core和.Net Standard直观理解
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @EnableConfigurationProperties注解使用
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Android] Upload package to device fails #2720
  • [ARM]ldr 和 adr 伪指令的区别
  • [BUUCTF 2018]Online Tool(特详解)