最近,我安装了一个闹钟应用,Citrus Alarm Clock。由于它的闹钟管理有点麻烦,而且我需要克隆一些设置,所以我开始寻找这些设置实际上保存在哪里。
我做的第一件事是查看文档,然后查看appData,最后查看程序文件下的应用程序安装文件夹。
没有找到.cfg
或.ini
文件.xml
。好吧,毫不奇怪,我开始搜索注册表。又一次失败让我非常生气,所以我下载了微软的进程监视器并尝试查看当我更改设置时会发生什么。
好吧,但是我之前看过这里,甚至之后也看过 - 这个文件夹看起来像这样:
我已禁用 Windows 文件夹设置下的所有文件隐藏功能。
我相信这与以下事实有关:程序文件是一个文件夹,对于非管理员帐户来说是只读的。
答案1
TL;DR:跳至结尾。
背景和技术说明
问题
微软彻底重新设计了 Windows Vista 以提高安全性。他们为提高安全性所做的一件事正是您所说的:他们限制了对文件Program Files
夹的访问。
对于大多数程序来说这不是问题,因为它们在安装后通常不会写入其安装目录,但有些程序设计不佳(或非常旧)并将用户设置等写入程序目录而不是用户文件夹。
解决方案
为了提供与这些程序的向后兼容性,Microsoft 创建了一个虚拟化环境。当非管理员用户运行尝试读取或写入安装目录的程序时,他们不会直接访问文件系统,而是通过一个垫片来访问它,该垫片会拦截此类文件操作请求并根据需要将其重定向到用户文件夹中的目录。这样,任何用户都无法破坏程序本身(或任何其他程序)。
例子
这在旧程序中很常见,包括仍在开发但已经存在一段时间的程序。例如,IrfanView 仍在积极开发中,但由于它很久以前就使用旧版本的 Windows 开始,因此它仍将其设置写入安装文件夹,从而重定向到虚拟商店。此外,旧游戏(例如 Quake 3、Serious Sam 等)经常因为它们经常将设置、保存的游戏和屏幕截图存储在程序文件夹而不是用户文档文件夹中,所以容易受到重定向。
此外,一些旧程序会写入 Windows 目录,因此 Windows 也会将其虚拟化。现在看来这似乎很疯狂,但在很久以前,在 Windows 95 引入注册表之前,大多数程序实际上都将其设置存储在 中\windows\win.ini
。这些古老的程序(假设它们甚至可以在 Windows 7 系统上运行)会将其文件操作重定向到虚拟存储、它们自己的个人副本\windows\win.ini
或\windows\system32\unwise.log
,等等。
地点
Windows 为每个用户保留一个单独的虚拟商店(其优点是允许每个用户进行设置、保存游戏等,即使对于本身不支持此功能的程序也是如此)。您可以在 上查看虚拟商店%localappdata%\VirtualStore
。
摘要/应用
在您的情况下,Citrus Alarm Clock 就是这样一个程序,因此 Windows 会将它尝试写入的任何配置文件重定向到虚拟存储%localappdata%\VirtualStore\Program Files (x86)\Citrus Alarm Clock
。
答案2
答案就在您的第一张截图中。
Citrusad.exe 创建文件 c:\program files (x86)\Citrus Alarm Clock\settings.xml 重新解析
重新解析点 - 文件或目录可以包含一个重新解析点,它是用户定义数据的集合。存储数据的应用程序和文件系统过滤器可以理解此数据的格式,您安装文件系统过滤器来解释数据并处理文件。当应用程序设置重新解析点时,它会存储此数据以及重新解析标记,该标记唯一地标识它正在存储的数据。当文件系统打开带有重新解析点的文件时,它会尝试查找与重新解析标记标识的数据格式相关联的文件系统过滤器。如果找到文件系统过滤器,该过滤器将按照重新解析数据的指示处理文件。如果未找到文件系统过滤器,则文件打开操作失败。
换句话说,该文件实际上被保存在其他地方。
您可以在下一行看到文件的真实位置:
c:\users\jakub\appdata\local\virtualstore\program 文件 (x86)\citrus 闹钟\settings.xml