2008-12-26 171 views
2

我有一個傳統的VB6程序,它將Access文件安裝在公用數據文件夾(CSIDL_COMMON_APPDATA)的子目錄中。我現在已經在64位的Vista系統上安裝了這個程序,並且程序工作正常,並且可以訪問C:\ ProgramData \ Wow \ WowCat.mdb中的文件,但是這個文件並沒有顯示在Windows資源管理器中。Vista ProgramData文件夾中缺少文件

我想覆蓋這個數據庫,從我的舊電腦,但使用資源管理器採取後來的版本,我看不到該文件在C:\ ProgramData \ Wow \(我顯示所有隱藏和系統文件) 。如果我繼續並複製新的WowCat.mdb,該程序仍然適用於舊版本。

在VB中逐步執行代碼,它肯定會打開文件:C:\ ProgramData \ Wow \ WowCat.mdb。只搜索C:驅動器會顯示新的副本,那麼程序訪問的地方在哪裏?

回答

2

這是因爲Windows Vista中的文件夾重定向。如果您通常沒有權限將某些內容寫入C:\ Program Files文件夾,則Vista會默認將這些寫入重定向到您的用戶目錄內的「祕密」文件夾。該文件對於創建該文件的用戶(以及任何以該用戶身份運行的程序)仍然可見,但對其他人不可見。因此,您的程序可能以不同於Explorer的不同用戶身份運行,因此Explorer無法看到它。

看到我的Vista的64位機上從DIR /人以下的輸出:

C:\ProgramData>dir /aL 
Volume in drive C has no label. 
Volume Serial Number is 74DB-58F8 

Directory of C:\ProgramData 

02.11.2006 16:41 <JUNCTION>  Application Data [C:\ProgramData] 
02.11.2006 16:41 <JUNCTION>  Desktop [C:\Users\Public\Desktop] 
02.11.2006 16:41 <JUNCTION>  Documents [C:\Users\Public\Documents] 
02.11.2006 16:41 <JUNCTION>  Favorites [C:\Users\Public\Favorites] 
02.11.2006 16:41 <JUNCTION>  Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu] 
02.11.2006 16:41 <JUNCTION>  Templates [C:\ProgramData\Microsoft\Windows\Templates] 
       0 File(s)    0 bytes 
       6 Dir(s) 62 040 051 712 bytes free 

該功能被稱爲重新分析點或路口,這取決於你在那裏讀到它們。它們與Unix中的符號鏈接非常相​​似。

0

正確執行此操作需要Windows Installer MSI或舊版安裝程序運行時提升,在CommonAppDataFolder下創建一個子文件夾,爲每個人(或適當的組)都提供完全控制權,並最終將MDB放置在該位置。您還可以創建該文件夾,將MDB文件移動到該文件夾​​中,並僅對該文件設置權限。

EXE自身也可以在第一次運行時執行此操作,前提是運行時升級或檢測到忽略並生成高級進程來執行此任務。標準規定,此操作應通過菜單項或按鈕啓動,但顯示UAC Shield圖標,而不僅僅是彈出UAC提示。

雖然通過MSI包裝要容易得多。