我们有一个程序,安装程序会检查是否存在配置文件,如果存在,则不会复制该文件(它假定用户已修改其配置文件并希望保留这些修改).不幸的是,这是一个Vista之前的应用程序,它将配置文件保存在Program Files中.问题是,如果你在重新安装某个API时手动清除目录,仍然认为那里有一个目录.例如,VB6及其浏览文件对话框看到的文件夹,但是explorer,cmd shell等无法查看文件夹.对文件进行写入仍然会将旧文件(对于某些API,但不是资源管理器)留下,除了"浏览文件"对话框中的表单之外,该文件无法删除.
这些Phantom文件夹发生了什么,我们如何删除文件以便所有API看到相同的东西?也许它与TxF或搜索索引器有关,但我们使用的安装程序(InnoSetup)和部分应用程序(用VB6编写的部分)都看到了旧版本的文件,其他一切都看到了当前版本.
Dunno,如果我在正确的轨道上,但是对于试图写入它的应用程序或者标记为"没有以正确的方式进行此操作"的应用程序,Vista不会虚拟化%programfiles%吗?(因此将其移动到文件系统的用户部分,而不告诉遗留应用程序 - 使其有点透明)..?
虚拟存储重定向文件存储在%appdata%中的某个位置 - 您还可以通过在别名位置检查资源管理器中的"Compability Files"选项来查找位置.据我所知,您需要停止写入%programfiles%以摆脱这种行为.
正如Oskar Duveborn所说,你所看到的很可能就是Vista的虚拟化行为.
当计算机启用了用户帐户控制(UAC)时,不允许标准用户和非提升程序写入"程序"文件夹.Windows会默默地将文件重定向到相应的子文件夹%AppData%\Local\VirtualStore
(例如,C:\Users\MyUser\AppData\Local\VirtualStore
).
如果您在资源管理器中浏览真实文件夹,您将看到"兼容性文件"工具栏按钮,您可以使用该按钮来浏览虚拟商店.
请注意,这只是Windows的兼容性行为 - 您的程序应该写入其自己的子文件夹%AppData%
.
有关详细信息,请参阅此TechNet杂志文章.