代码之家  ›  专栏  ›  技术社区  ›  Kris Erickson

Vista幻影目录

  •  2
  • Kris Erickson  · 技术社区  · 15 年前

    我们有一个程序,安装程序会检查配置文件是否存在,如果存在,它不会复制该文件(假定用户修改了配置文件并希望保留这些修改)。不幸的是,这是一个Vista之前的应用程序,它将配置文件保存在程序文件中。问题是,如果在重新安装目录时手动清除该目录,则某些API仍然认为其中存在目录。例如,vb6及其“浏览文件”对话框可以看到该文件夹,但是资源管理器、命令shell等无法看到该文件夹。在文件上写操作仍会保留旧文件(到某些API,但不到资源管理器),除了“浏览文件”对话框中的窗体外,无法删除旧文件。

    这些幻影文件夹发生了什么,我们如何删除该文件,以便所有API都能看到相同的东西?也许这和 TxF 或者索引器来搜索,但是我们使用的安装程序(innosetup)和应用程序的部分(用vb6编写的部分)都看到了文件的旧版本,其他的都看到了当前版本。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Ant    15 年前

    正如OskarDuveborn所说,您看到的很可能是Vista的虚拟化行为。

    当机器启用了用户帐户控制(UAC)时,标准用户和非提升程序不允许写入程序文件夹。相反,Windows会静默地将文件重定向到 %AppData%\Local\VirtualStore (例如, C:\Users\MyUser\AppData\Local\VirtualStore )

    如果您在资源管理器中浏览真正的文件夹,您将看到“兼容性文件”工具栏按钮,您可以使用它来浏览虚拟存储。

    注意,这只是来自Windows的兼容性行为-您的程序应该写入自己的子文件夹 %AppData% .

    有关详细信息,请参阅 this TechNet Magazine article .

        2
  •  5
  •   Oskar Duveborn    15 年前

    不知道,如果我在正确的轨道上,但vista不虚拟化尝试写入它的应用程序的%programfiles%吗,或者标记为“不以正确的方式进行此操作”?(因此,将它移到文件系统的用户部分,而不告诉传统应用程序关于它的信息——使它有点透明)…?

    虚拟存储重定向的文件存储在%appdata%中的某个位置-当位于别名位置时,您还可以通过检查资源管理器中的“可兼容文件”选项来查找该位置。据我所知,您需要停止写入%programfiles%以消除这种行为。

        3
  •  0
  •   Steven Evers    15 年前

    您是指appdata文件夹(c:\documents and settings\username\appdata)吗?我不在我的Vista机器上,但我认为这就是路径,而且Afaik卸载后不会被清除。

        4
  •  0
  •       15 年前

    上述由Ant提供的TechNet链接(接受的答案)不再有效。新链接是:

    http://support.microsoft.com/kb/927387 -Windows Vista中常见的文件和注册表虚拟化问题