我们有一个程序,安装程序会检查配置文件是否存在,如果存在,它不会复制该文件(它假设用户已修改其配置文件并希望保留这些修改)。不幸的是,这是一个 Vista 之前的应用程序,它将配置文件保存在 Program Files 中。问题是,如果你在重新安装时手动清除该目录,某些API仍然认为那里有一个目录。例如,VB6 及其浏览文件对话框可以看到文件夹,但资源管理器、cmd shell 等无法看到文件夹。覆盖文件仍然会保留旧文件(对于某些 API,但不在于资源管理器),除了“浏览文件”对话框中的形式之外,无法将其删除。
这些 Phantom 文件夹发生了什么?我们如何删除该文件以便所有 API 看到相同的内容?也许这有关系TxF http://en.wikipedia.org/wiki/Transactional_NTFS#Transactional_NTFS,或用于搜索的索引器,但我们使用的安装程序 (InnoSetup) 和应用程序的部分(用 VB6 编写的部分)都看到文件的旧版本,而其他所有内容都看到当前版本。
正如 Oskar Duveborn 所说,您所看到的很可能是 Vista 的虚拟化行为。
当计算机启用了用户帐户控制 (UAC) 时,不允许标准用户和非提升程序写入程序文件夹。 Windows 相反会默默地将文件重定向到适当的子文件夹%AppData%\Local\VirtualStore
(例如,C:\Users\MyUser\AppData\Local\VirtualStore
).
如果您在资源管理器中浏览真实文件夹,您将看到“兼容性文件”工具栏按钮,您可以使用该按钮来浏览虚拟存储。
请注意,这只是 Windows 的兼容性行为 - 您的程序应该写入其自己的子文件夹%AppData%
.
有关更多信息,请参阅这篇 TechNet 杂志文章 http://technet.microsoft.com/en-us/magazine/2007.06.uac.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)