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