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

Xop*_*ter 27 windows-7 ntfs filesystems dir

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

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

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

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

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

Ben*_*n N 64

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

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

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

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

您将在此处找到您的文件:

%LOCALAPPDATA%\VirtualStore\Program Files (x86)\IMAPSize\backup
Run Code Online (Sandbox Code Playgroud)

在浏览 时VirtualStore,您可能会惊讶于哪些程序表现不佳并且需要虚拟化安全网。

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

  • 在这里,我以为我知道 Windows。要么这是一个做得好的 4 月的傻瓜笑话,要么我今天学到了一些重要的东西。谢谢,@Ben N! (16认同)
  • @Xophmeister 这是一个权衡。正如答案中所指出的,在 Vista 之前,将软件写入自己的应用程序目录非常普遍。这是一个巨大的安全漏洞,因此必须解决。替代方案是 1) 防止写入并破坏所有应用程序,2) 使用虚拟化将文件保存在安全位置。1) 显然是站不住脚的,非常违背微软的SOP,最终只会导致大家又像以前一样在管理员下运行。这可能会令人困惑,但它仍然可能是最好的选择。不要写入危险目录。 (4认同)
  • @Aganju 几个月前,我不得不帮助一个 Windows 用户为 WinSCP 创建一个密钥对。那些变得不可见的方式与问题中描述的方式几乎相同。当时我假设一个解释与这个答案中给出的解释几乎相同。我没有费心去验证我的假设,因为问题是通过将文件放在用户主目录下来解决的。但至少我可以确认,这个答案对我来说根本不像是一个笑话。 (3认同)
  • 好吧,我会被诅咒的!他们都在那里。这是*奇怪*的行为,即使它是有意的。我以为我有一个文件系统错误!...这也可以解释为什么我的第一个邮箱备份确实出现:该程序首先从安装程序运行(“您现在要运行这样那样的吗?”),其中将其提升为具有管理员权限;而“隐藏”运行是作为本地用户。 (3认同)

归档时间:

查看次数:

2936 次

最近记录:

9 年,5 月 前