Windows 7的VirtualStore

这两天在windows 7上调一个bug,过程中出现了一个很有意思的事情。我的bug需要存一个文件到C:\Program Files\Zune\下面去。因为文件是另外一个程序的附件,我就直接右键,选择另存为,然后选择这个地址。一切正常,文件保存了,而且程序确实读到了这个文件。

然而后来因为别的问题,我打开了C:\Program Files\Zune目录,却惊奇的发现那个文件并不存在。开始以为是文件属性搞的鬼,在三试了几次后确认了他的确不存在。当时也没有在意,就自己直接从explorer里面有复制了一次,这次注意到了windows问我要admin权限来保存这个文件。确认之后,发现文件这次真的在了。

事到如此,也就算了,我也没有深究。但是后来另外一个bug要我存不同的内容到同样的文件里,考虑到上次的事情,这次我手工把这个文件先存到别的地方,然后用explorer复制过去,过程中同样要了我权限,覆盖了原来的内容。

不过文件保存了之后,我发现我的应用程序的行为怎么还是跟以前那个文件一样,不管我怎么修改这个文件,他还是能取到以前那个文件的内容。搞了几次,火了,祭起process monitor,观察了一下,发现我的应用程序读了两个地方,一个是C:\Program Files\Zune,然后又读了%USERPROFILE%\AppData\Local\VirtualStore\Program Files\Zune.而那下面居然有我以前存的文件。

后来折腾了一下发现,如果我从一个没有admin权限的程序去给C:\Program Files\Zune下面保存文件,windows不会提醒错误,而是偷偷的帮我转移的了这个所谓的 Virtual Store里面去。可以理解,现在有很多傻逼程序还是习惯把各种配置文件和临时文件保存在可执行文件所在的目录。Windows 7的这个feature显然是为了对付这些程序的。不知道这个feature是windows 7新出的呢还是Windows Vista的时候就有的。

再次诅咒那些到处乱放临时文件的应用程序的作者~~~~~~

Advertisements
This entry was posted in Win32 Programming. Bookmark the permalink.

2 Responses to Windows 7的VirtualStore

  1. Peter says:

    也许你就是那些作者之一,哈哈

  2. 小超 says:

    那个文件夹可以删吗?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s