非隐藏目录不会显示在资源管理器中,但创建该目录的程序可以访问它

非隐藏目录不会显示在资源管理器中,但创建该目录的程序可以访问它

我在用着IMAP尺寸备份我的邮箱。该过程只是将邮箱内容转储到.eml磁盘上的文件中。无论如何,我备份的第一个邮箱如我所料地显示出来。但是,下一个邮箱没有显示在 Explorer 中,如果我在地址栏中输入它,它会告诉我它不存在。

然而,IMAPSize 坚持认为文件在那里。(操作期间执行了大量磁盘写入操作。)此外,目录出现在 Windows 目录对话框中,并且 - 因为我安装了 GNU 工具 - 它显示在ls(但不在本机中dir)。我无法cd进入目录,但ls似乎能够访问它(而且,事实上,我期望的目录和文件似乎在那里)。

显示列表的命令提示符窗口

还请注意,和输出中的时间戳和文件大小backup.db是不同的。dirls -l

简而言之:这里发生了什么事?我该如何解决它?

答案1

让我猜测一下:创建该文件的程序以及 GNU 实用程序未以管理员身份运行。

首先,让我们回顾一下历史。在 Windows XP 时代,许多程序都假设它们将始终以管理员身份运行,并会肆无忌惮地写入C:\Windows和等位置C:\Program Files (x86)。在 Vista 中,微软试图让更少的人成为管理员,但标准用户无法写入这些位置。他们需要这些可疑的程序继续工作(否则人们不会升级)。因此,他们引入了一项神奇的功能,称为UAC 虚拟化

以标准用户身份运行的程序可能认为它们对重要位置的写入成功了,但实际上,Windows 将数据隐藏在每个用户位置。当这些程序在目录中查找文件时,Windows 会检查该位置的虚拟存储中是否有任何文件,如果有,它会将它们添加到目录列表中。(注册表有等效功能。)

看起来您的邮件程序Program Files (x86)在以普通用户身份运行时尝试写入下面的某个位置。写入被重定向,因此它实际上没有到达那个位置。程序仍然可以看到它,因为 Windows 为它保留了幻觉。Explorer 看不到它,因为它向操作系统宣布它表现良好,因此不需要重定向。命令提示符的命令dir不是程序(它只是 的一个功能cmd.exe),因此它也被视为“知情”,因此不会显示兼容性文件。ls是一个显然不知情的程序,因此它可以看到兼容性文件。

您可以在这里找到您的文件:

%LOCALAPPDATA%\VirtualStore\Program Files (x86)\IMAPSize\backup

在仔细研究时VirtualStore,您可能会惊讶地发现哪些程序行为不当且需要虚拟化安全网。

如果您想停止重定向,请以管理员身份运行该程序,或将您的备份保存在您无需管理员权限即可写入的位置。

相关内容