Program Files、Windows 目錄或系統根目錄 (C:),但找不到檔案。HKLM\Software 卻未看到更新。以上皆為 UAC 虛擬化 (File/Registry Virtualization) 導致的相容性問題。
Windows Vista/7 預設以標準使用者權限執行應用程式。舊版應用程式假設擁有管理員權限,嘗試寫入受保護區域時會失敗。為了相容,Windows 透明地將寫入操作重導向至使用者設定檔下的虛擬存放區:
C:\Program Files\Contoso\Settings.ini → C:\Users\Username\AppData\Local\VirtualStore\Program Files\Contoso\Settings.iniHKLM\Software\Contoso → HKCU\Software\Classes\VirtualStore\MACHINE\Software\Contoso 或 HKU\UserSID_Classes\VirtualStore\Machine\Software\Contoso
重要: 為 Windows Vista/7 開發新應用程式時,務必在資訊清單中宣告 requestedExecutionLevel,關閉虛擬化,避免虛擬化檔案/登錄帶來的複雜性。
新應用程式不應依賴虛擬化,而應設計為在標準使用者權限下正常運作:
%ALLUSERSPROFILE% (預設 C:\ProgramData)。| 平台 | API | 常用資料夾識別碼 |
|---|---|---|
| Native C++ | SHGetKnownFolderPath |
FOLDERID_ProgramData (共用)FOLDERID_LocalAppData (使用者、非漫遊)FOLDERID_RoamingAppData (使用者、漫遊) |
| Managed (.NET) | Environment.GetFolderPath |
Environment.SpecialFolder.CommonApplicationData (共用)Environment.SpecialFolder.LocalApplicationData (使用者、非漫遊)Environment.SpecialFolder.ApplicationData (使用者、漫遊) |
%ALLUSERSPROFILE%、%LOCALAPPDATA%、%APPDATA%。Documents 或使用者指定位置,非 應用程式資料資料夾。%LOCALAPPDATA%\VirtualStore (位置未來版本可能變更)。dir %USERPROFILE%\yourfile.dat /s /a 全盤搜尋。Process Name is YourApp.exe Include,僅啟用檔案系統事件。SaveFile 方法)。

<requestedExecutionLevel level="asInvoker" uiAccess="false" />。ProgramData;使用者專屬 → LocalAppData/RoamingAppData;使用者文件 → Documents。