2

我们有一个程序,安装程序会检查配置文件是否存在,如果存在,它不会复制该文件(它假设用户已经修改了他们的配置文件并希望保留这些修改)。不幸的是,这是一个 pre-Vista 应用程序,它将配置文件保存在 Program Files 中。问题是,如果您在重新安装某些 API 时手动清除该目录,仍然认为那里有一个目录。例如 VB6,它的文件浏览对话框看到文件夹,但是资源管理器、cmd shell 等看不到文件夹。覆盖文件仍然会留下旧文件(对某些 API,但不是对资源管理器),除了“浏览文件”对话框中的表单外,无法删除旧文件。

这些 Phantom 文件夹是怎么回事,我们如何删除文件以便所有 API 看到相同的内容?也许它与TxF或用于搜索的索引器有关,但我们使用的安装程序 (InnoSetup) 和应用程序的一部分(用 VB6 编写的部分)都看到了旧版本的文件,而其他一切都看到了当前版本。

4

4 回答 4

5

不知道我是否走在正确的轨道上,但是 Vista 是否为尝试写入它的应用程序虚拟化 %programfiles% 或以其他方式标记为“没有以正确的方式进行此操作”?(因此将它移动到文件系统的用户部分,而不告诉遗留应用程序 - 使它有点透明)..?

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

于 2009-02-18T19:16:58.417 回答
5

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

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

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

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

有关详细信息,请参阅此 TechNet 杂志文章

于 2009-02-19T09:33:52.053 回答
0

您是指 AppData 文件夹(C:\Documents and Settings\UserName\AppData)吗?我不在我的 vista 机器上,但我认为这就是路径,而且卸载后它没有被擦除。

于 2009-02-18T18:46:05.480 回答
0

上面 Ant 的 TechNet 链接(已接受的答案)不再有效。新链接是:

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

于 2009-05-05T15:24:48.310 回答