2009-02-18 51 views
2

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

这些Phantom文件夹正在发生什么,我们如何删除文件以便所有的API都看到相同的东西?可能它与TxF或搜索索引器有关,但是我们使用的安装程序(InnoSetup)和应用程序的一部分(用VB6编写的部分)都看到旧版本的文件,其他所有内容都可以看到当前版本。

+1

的发明或者被推为与Vista - 这是情况并非如此。例如,在当前用户配置单元或其%appdata%文件夹中存储内容是相当古老和正确的做事方式。我从来没有像本地管理员那样跑过即使在NT4 damnit ^^ – 2009-02-18 19:14:03

回答

5

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

如果机器启用了用户帐户控制(UAC),则不允许标准用户和非升级程序写入程序文件夹。 Windows改为将文件重定向到%AppData%\Local\VirtualStore的相应子文件夹(例如,C:\Users\MyUser\AppData\Local\VirtualStore)。

如果您在资源管理器中浏览真实文件夹,则会看到'Compatibility Files'工具栏按钮,您可以使用它来浏览虚拟商店。

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

欲了解更多信息,请参阅this TechNet Magazine article

0

你的意思是AppData文件夹(C:\ Documents and Settings \ UserName \ AppData)?我不在我的vista机器上,但我认为这是路径,并且afaik在卸载后不会被擦除。

+0

与AppData无关,它与%ProgramFiles%(C:\ Program Files)以及Vista如何处理它有关。出于许多原因,我们无法将配置移到AppData中。 – 2009-02-18 18:48:53

5

不知道如果我在正确的轨道上,但不Vista虚拟化%programfiles%的应用程序试图写入它或以其他方式被标记为“不正确的方式”? (并因此将其移动到文件系统的用户部分的某个位置,而不会告诉传统应用程序 - 使其变得透明)。?

虚拟商店重定向文件存储在%appdata%的某处 - 您也可以通过在别名位置查看Explorer中的“兼容性文件”选项来找到位置。就我所知,您需要停止写入%programfiles%以摆脱此行为。

+0

是的,我认为你在正确的轨道上,但文件系统的用户部分在哪里? – 2009-02-19 01:28:02

0

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

http://support.microsoft.com/kb/927387 - 只要有人想着%APPDATA%普通文件和注册表虚拟化问题在Windows Vista