2009-02-18 35 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