2013-07-30 53 views
2

我有在將可執行文件是相同的文件夾中創建它的數據文件中的32位的Windows舊應用(與C/Win32的源)。如何獲得(編程)Windows UAC虛擬文件的位置?

因爲應用程序沒有安裝程序,用戶可以將的地方,他/她想要的應用程序有一個對話框,告知哪裏它的數據是位於用戶的可執行文件。

但在微軟Vista /七,如果用戶將在Program Files或其他任何系統保護文件夾中的數據文件的應用程序虛擬化獲取並移動到虛擬商店。

如果在Vista /七,我還是想告訴在數據文件所在的用戶:如果 (不妨礙在清單文件虛擬化)

  1. 我怎麼能知道(編程)數據文件是虛擬化的?或者,如果可執行文件所在的文件夾意味着數據文件將被虛擬化?

  2. 假設我知道數據文件是虛擬化的,我怎麼能知道(編程)的虛擬文件夾的位置,以顯示它的信息對話框?

我發現以下問題非常接近,我要問,但它並不顯示在虛擬化正在發生一個文件知道的解決方案(如果有的話),並在它被虛擬化。

How to detect file redirection to the Windows VirtualStore?

回答

3

虛擬化是透明的應用程序。知道它是否是被虛擬化的唯一方法是問OS,每個答案在您鏈接到(使用GetTokenInformation()TokenVirtualizationEnabled標誌)的問題,但也沒辦法(我知道的)問OS其中虛擬化項目實際上被存儲,因爲它可能不同於一個OS版本到下一個。你將不得不做一些研究,然後硬編碼你的應用程序在運行時檢測到的每個給定操作系統的路徑。

如果你要更新您的代碼來檢測虛擬化,那麼你最好更新代碼與UAC發揮更好的代替。停止將文件存儲在不屬於的地方,然後開始將它們存儲在Microsoft希望存儲它們的地方。在這種情況下,請改爲在用戶的配置文件中。使用SHGetFolderPath()或相關的功能定位(在Vista +或SHGetKnownFolderPath()找到FOLDERID_LocalAppData文件夾)用戶的CSIDL_LOCAL_APPDATA文件夾,然後創建它下方的子文件夾爲您的應用程序存儲在它的數據文件。

相關問題