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


26

我正在使用IMAPSize备份邮箱。该过程只是将邮箱的内容转储到.eml磁盘上的文件中。无论如何,我备份的第一个邮箱会按预期显示。但是,下一个不会在资源管理器中显示,如果我在地址栏中输入它,它会告诉我它不存在。

但是,IMAPSize坚持文件在那里。(在操作过程中正在执行许多磁盘写操作。)此外,该目录确实出现在Windows目录对话框中,并且-正如我已安装的GNU工具-所示ls(但不是在本机中dir)。我无法cd进入目录,但是ls似乎可以访问它(实际上,我期望的目录和文件似乎已经存在)。

命令提示符窗口显示清单

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

简而言之:这是怎么回事,我该如何解决!


1
我看到的唯一明显区别是,ls -l显示了到“隐藏”目录和文件的特殊数量的硬链接...我不知道为什么这样,也不知道在NTFS中如何解释硬链接。
Xophmeister '16

...只是确认一下:我可以使用cat(另一个GNU coreutil)从命令行访问“隐藏”文件中的数据。同样,本机Windows工具(例如type)甚至找不到该文件。
Xophmeister '16

Answers:


63

让我猜测:创建文件的程序以及GNU实用程序都没有以管理员身份运行。

首先,一些历史。在Windows XP的日子里,很多程序假定他们总是以管理员身份运行,并写信给喜欢的地方C:\Windows,并C:\Program Files (x86)与野生放弃。借助Vista,微软试图减少管理员人数,但标准用户无法写信给那些地方。他们需要那些可疑的程序才能继续工作(否则人们将无法升级)。因此,他们引入了一种神奇的功能,称为UAC虚拟化

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

看起来您的邮件程序在Program Files (x86)以普通用户身份运行时试图写入下面的位置。写入已重定向,因此实际上并没有到那个地方。该程序仍然可以看到它,因为Windows对其保持了幻想。资源管理器没有看到它,因为它向操作系统宣布其行为良好,因此不需要重定向。命令提示符的dir命令不是程序(它只是的功能cmd.exe),因此也被视为“已知”,因此不会显示兼容性文件。ls是一个显然不知道的程序,因此可以看到兼容性文件。

您将在这里找到文件:

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

在探究时VirtualStore,您可能会对那些程序表现不佳并且需要虚拟化安全网感到惊讶。

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


16
我以为我知道Windows。这或者是做得很好的愚人节笑话,还是我今天学到了一些重要的东西。谢谢,@本N!
阿甘州'16

3
@Aganju几个月前,我不得不帮助Windows用户为WinSCP创建密钥对。这些问题几乎以与问题中描述的相同的方式变得不可见。当时我假设一种解释与该答案中的解释几乎相同。我不必费心去验证我的假设,因为该问题已通过将文件放在用户主目录下而得以解决。但是至少我可以确认,这个答案对我来说根本不是一个玩笑。
kasperd '16

3
好吧,我该死!他们都在那里。即使是故意的,这也是奇怪的行为。我以为我遇到了文件系统错误!...这也可以解释为什么我的第一个邮箱备份确实出现了:该程序是首先从安装程序运行的(“您现在要运行某某东西吗?”),将其提升为具有管理员权限;而“隐藏”运行是作为本地用户。
Xophmeister

1
@Aganju我猜您从未使用过Vista。它具有在资源管理器中向您显示虚拟文件的功能。因为几年来这个问题很普遍。到Win7出现时,使用最广泛的软件就停止了运行,假设它可以写入其安装目录的子文件夹。并且该功能已在Windows的最新版本中变得不那么明显或完全删除。
Dan Neely

4
@Xophmeister这是一个折衷。如答案中所述,在Vista之前,将软件写入其自己的应用程序目录的情况很普遍。这是一个巨大的安全漏洞,因此必须解决。备选方案是:1)防止写入并破坏所有应用程序,2)使用虚拟化将文件保存在安全的位置。1)显然是站不住脚的,并且非常不利于Microsoft的SOP,最终它只会导致每个人都像以前一样在管理员的领导下运行所有​​程序。这可能会令人困惑,但它仍然可能是最佳选择。不要写危险目录。
a安
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.