Windows 使用者設定檔入門 - AppData 與 NTUSER.DAT
· 更新日期: · Go Komura · Windows, 使用者設定檔, AppData, FSLogix, 漫遊設定檔, Windows 開發
更新紀錄(2 筆,最後更新 2026年09月04日)
本文的修改紀錄。已保存的更新前版本,可透過附有 DOI 的永久連結閱讀。
引用本文(DOI: 10.5281/zenodo.21616318)
本文保存於 Zenodo。以下同時提供一律指向最新版本的 DOI,以及固定於您正在閱讀版本的 DOI。
Go Komura(2026)。〈Windows 使用者設定檔入門 - AppData 與 NTUSER.DAT〉。小村軟體有限公司。https://doi.org/10.5281/zenodo.21616318 https://comcomponent.com/zh-TW/blog/2026/03/17/002-windows-user-profile-guide/
- DOI(最新版本)
- 10.5281/zenodo.21616318
- DOI(此版本)
- 10.5281/zenodo.22297155
本文是為管理 Windows 的企業資訊部門、電腦部署負責人與 Windows 應用程式開發者所寫的一般性整理。 圖為概念圖。在支援 Mermaid 的 Markdown 環境中會顯示成圖。
內容以 2026 年 4 月時點可確認的 Microsoft 官方資訊為前提。[1][4][7][10][13][14]
閱讀指引
文章較長,先按不同角色列出入口。
| 你的情況 | 先看這裡就好 |
|---|---|
| 想在 5 分鐘內掌握設定檔是什麼 | 第 1 章、第 2 章 |
| 想決定 Windows 應用程式儲存位置的開發者 | 3.1、第 6 章 |
| 想挑選漫遊或 FSLogix 的方式 | 第 5 章、第 8 章 |
| 眼前正在出事、很困擾 | 第 7 章(接著看第 9 章) |
| 看不懂術語 | 1.1 的縮寫表 |
在 Windows 的諮詢中,「設定檔」這個詞用得相當廣。
C:\Users\使用者名稱裡面到底裝了什麼%AppData%和%LocalAppData%該怎麼區分使用- 網域環境的漫遊設定檔是什麼
- Mandatory 設定檔和 Temporary 設定檔差在哪裡
- 共用電腦、RDS、VDI、Azure Virtual Desktop 該選哪一種
- 設定檔壞掉時,該從哪裡開始看
這一帶會把 帳戶、資料夾、登錄檔、同步方式、維運政策 一次全混在一起,討論很快就會偏掉。
本文先建立 把 Windows 使用者設定檔當成一張設計圖來看的視角,接著依序梳理 AppData 的區分使用、漫遊、Mandatory、Temporary、FSLogix,以及出問題時的排查方式。
1. 先講結論
進入細節之前,先把實務上的結論列出來。
- Windows 的使用者設定檔不只是
C:\Users\使用者名稱這個資料夾。它是 檔案群 + 使用者登錄區(NTUSER.DAT) 的組合。[1] - 一般的本機電腦預設會建立 本機設定檔。第一次登入時,會 以
C:\Users\Default為基礎建立新的設定檔。[11][12] - 應用程式的儲存位置不要隨手決定,基本的梳理方式是 想讓每位使用者帶著走的設定放
%APPDATA%,該台電腦專用的快取或暫時性狀態放%LOCALAPPDATA%。[2][3] - 漫遊設定檔 是「把整份設定檔收攏到共用位置」的機制,Folder Redirection 則是「只把 Documents 等已知資料夾移到別處」的機制,兩者並不相同。[4][5]
- Mandatory 設定檔 是「讓人用,但不讓人存」的唯讀設定檔。Temporary 設定檔 是出錯時的緊急替代方案,前提就是每次都會被清掉。[7][8][9]
- 跨 OS 世代的漫遊設定檔要特別小心。Windows 10 / Server 2016 以後與更早的版本並不相容,應該以區分設定檔版本為前提來規劃。[6]
- 在 RDS / VDI / Azure Virtual Desktop 上,與其只靠傳統的漫遊設定檔硬撐,把 FSLogix 設定檔容器 當成首選的場合相當多。Microsoft 在 Azure Virtual Desktop 也建議使用 FSLogix。[13][14]
- 出問題時,比起一上來就動
C:\Users,先看 Application 記錄檔、User Profile Service 的 Operational / Diagnostic 記錄檔、共用路徑,以及NTUSER.DAT/USRCLASS.DAT的屬性與權限 方向比較對。[10][11][16]
總之,Windows 設定檔的問題就歸結為 「什麼東西放哪裡、帶著走到什麼程度、失敗時怎麼還原」。
1.1 本文使用的縮寫
開頭就一口氣出現的縮寫,先在這裡列出全稱。
| 縮寫 | 全稱 | 意義 |
|---|---|---|
| RDS | Remote Desktop Services | 多位使用者遠端連線到一台伺服器,並在上面各自持有工作階段的方式 |
| VDI | Virtual Desktop Infrastructure | 為每位使用者配置一台虛擬機器桌面的方式 |
| AVD | Azure Virtual Desktop | Microsoft 在 Azure 上提供的桌面虛擬化服務 |
| HKCU | HKEY_CURRENT_USER |
登錄檔中專屬於目前登入使用者的部分。實體就是 NTUSER.DAT |
| 登錄區 | registry hive | 把登錄檔的一部分切出來存成檔案的東西。NTUSER.DAT 和 USRCLASS.DAT 就屬於這一類 |
| GPO | Group Policy Object,群組原則物件 | 把設定發送給網域底下電腦或使用者的機制 |
| ACL | Access Control List,存取控制清單 | 規定誰能讀寫該資料夾或檔案的設定 |
| ETL 追蹤 | Event Trace Log | 把 Windows 的詳細運作紀錄採集成 .etl 檔案的機制。事件記錄檔不夠用時的最後手段 |
| UNC 路徑 | Universal Naming Convention | 以 \\server\share\... 形式書寫的網路共用路徑 |
| VHD / VHDX | Virtual Hard Disk | 虛擬磁碟的檔案格式。FSLogix 會把整份設定檔裝進裡面 |
| CopyProfile | — | 搭配 Sysprep,把調整好的設定檔套用到預設設定檔的官方支援步驟 |
| Sysprep | System Preparation Tool | 為了部署而把 Windows 映像檔一般化的工具 |
| 低完整性等級 | low integrity level | 給處理程序的權限區分之一,寫入位置受到強烈限制的層級。LocalLow 就是在這裡派上用場 |
圖中實線表示始終成立的關係,虛線表示附帶條件的關係(成立條件寫在詳細頁面中各關係的說明中)。關係的完整清單(共 24 條,附依據與可信度)以及主要概念的定義,彙整在知識地圖詳細頁面(日文)。資料:JSON-LD / Turtle
2. Windows 的「使用者設定檔」到底是什麼
一開始先把 帳戶 和 設定檔 分開來想,會輕鬆很多。
flowchart LR
A[使用者帳戶<br/>誰要登入] --> B[使用者設定檔<br/>那個人的設定與資料]
C[電腦 / OS] --> B
B --> D[桌面設定]
B --> E[AppData]
B --> F[Documents / Desktop 等]
B --> G[在 HKCU 看得到的設定]
圖 1: 帳戶是識別碼,設定檔是設定與資料的實體,電腦讀取它來使用。
- 帳戶 是用來識別某個人的東西
- 設定檔 是那個人工作環境的實體
- 電腦 是讀取並使用那份設定檔的地方
Microsoft Learn 也說明,使用者設定檔包含 檔案系統上的設定檔資料夾群 與 登錄區 NTUSER.DAT,登入時會載入這個登錄區並當成 HKEY_CURRENT_USER 使用。[1]
2.1 不只是「資料夾」,還包含「登錄檔」
這是重點。
flowchart TD
A[登入] --> B[鎖定設定檔資料夾]
B --> C[載入 NTUSER.DAT]
C --> D[當成 HKCU 使用]
B --> E[準備 Desktop / Documents / AppData]
D --> F[使用者設定生效]
E --> F
圖 2: 登入時要資料夾準備好、NTUSER.DAT 也載入了,使用者設定才會生效。
也就是說,只看 C:\Users\使用者名稱 還只有一半。
Windows 設定檔大致分成以下兩層。
- 檔案層
Desktop、Documents、Downloads、AppData等 - 登錄檔層
載入
NTUSER.DAT之後的HKCU
設定檔損壞之所以麻煩,是因為有 只有資料夾這一側壞掉 和 登錄區這一側出問題 兩種情況。[1][11]
2.2 第一次登入時以 Default 為基礎
新使用者第一次登入該台電腦時,Windows 會 以 C:\Users\Default 為基礎建立本機設定檔。[11]
flowchart LR
A[C:\Users\Default] --> B[第一次登入]
B --> C[產生 C:\Users\使用者名稱]
C --> D[載入 NTUSER.DAT]
D --> E[成為該使用者專用的環境]
圖 3: 第一次登入時,會以 Default 為基礎建立該使用者專用的設定檔。
在映像檔部署或電腦初始設定作業的場景裡,這裡處理得草率,後面會很難收拾。
關於預設設定檔的自訂,Microsoft 說明 受支援的做法是使用 CopyProfile。手動複製或以前那種草率的複製方式,會帶進多餘的資訊,可能造成應用程式或系統穩定性的問題。[12]
3. 如何看懂 C:\Users\使用者名稱
從資料夾這一側看使用者設定檔,大致是這樣的結構。
flowchart TD
A["C:\Users\使用者名稱"] --> B[Desktop]
A --> C[Documents]
A --> D[Downloads]
A --> E[Pictures]
A --> F[AppData]
A --> G[NTUSER.DAT]
F --> H[Roaming]
F --> I[Local]
F --> J[LocalLow]
圖 4: 設定檔由資料夾群和 NTUSER.DAT 構成,AppData 底下又再分成三個。
實務上最先看的位置,大致就是這幾個。
| 位置 | 裡面放什麼 | 實務上怎麼看 |
|---|---|---|
Desktop |
桌面上的檔案 | 使用者看得見的東西 |
Documents |
使用者自己做的文件 | 容易放進業務資料 |
Downloads |
下載下來的東西 | 容易混進垃圾 |
AppData\Roaming |
偏使用者設定 | 適合放想帶著走的設定 |
AppData\Local |
偏電腦固有資料與快取 | 容量容易膨脹 |
NTUSER.DAT |
使用者登錄檔 | HKCU 的實體 |
3.1 把 AppData 分成三塊來想
在 Windows 應用程式開發和問題調查中,這裡最容易混在一起。
Microsoft 的指引說明,應用程式專屬資料要用 FOLDERID_RoamingAppData(Roaming AppData),暫存檔案或不會在其他電腦上使用的資料則用 FOLDERID_LocalAppData。[2]
另外,在 Known Folders 的定義中,預設路徑歸納如下。[3]
%APPDATA%=%USERPROFILE%\AppData\Roaming%LOCALAPPDATA%=%USERPROFILE%\AppData\LocalLocalLow=%USERPROFILE%\AppData\LocalLow
flowchart LR
A[AppData] --> B[Roaming]
A --> C[Local]
A --> D[LocalLow]
B --> B1[想帶著走的設定]
B --> B2[較小的使用者狀態]
C --> C1[快取]
C --> C2[可以重新產生的資料]
C --> C3[該台電腦固有的狀態]
D --> D1[低完整性處理程序可寫入的區域]
圖 5: Roaming 放想帶著走的設定,Local 放該台電腦固有的東西,LocalLow 是低完整性處理程序的置放處。
LocalLow 不是「沒人用的地方」,而是「權限低的應用程式的置放處」
三個之中只有 LocalLow 的說明常常特別短,但那只是用途特殊,它存在的理由很明確。
Windows 的處理程序有一種叫 完整性等級(integrity level) 的權限區分,以低完整性等級執行的處理程序,無法寫入 AppData\Roaming、AppData\Local 以及 HKCU 的大部分位置。這樣下去什麼都存不了,所以 Windows 準備了 低完整性等級也能寫入的位置,就是 %USERPROFILE%\AppData\LocalLow,以及登錄檔這一側的 HKEY_CURRENT_USER\Software\AppDataLow。[19]
歸納起來就是這樣。
| 誰會寫入 | 會不會漫遊 | |
|---|---|---|
Roaming |
以一般完整性等級執行的應用程式 | 看方式而定 |
Local |
以一般完整性等級執行的應用程式 | 不會 |
LocalLow |
以低完整性等級執行的應用程式 | 不會 |
典型例子是像瀏覽器這樣,刻意把直接處理網際網路內容的部分降到低權限來執行的應用程式。這種設計的意思是「萬一那個處理程序被接管,也把災情範圍關在 LocalLow 裡面」。
從應用程式開發這一側來看,結論很單純。
- 如果自己的應用程式沒有以低完整性等級執行,就沒有理由使用
LocalLow。 請用Local。 - 反過來說,如果
LocalLow底下多出沒看過的資料夾,那麼往裡面寫的就是 某個以低完整性等級執行的東西。查容量時這會是線索。
實務上這樣區分使用
| 想儲存的東西 | 位置的首選 | 理由 |
|---|---|---|
| 使用者設定 | %APPDATA% |
以使用者為單位處理比較方便 |
| 該台電腦專用的快取 | %LOCALAPPDATA% |
容易以「不帶到其他電腦」為前提 |
| 登入紀錄、巨大快取、縮圖之類 | %LOCALAPPDATA% |
讓它們跟著漫遊容易變慢 |
| 使用者自己建立的文件 | Documents 等 |
因為那是業務產出物,不是應用程式內部狀態 |
| 所有使用者共用的可變資料 | ProgramData |
因為它不屬於個別使用者 |
在 Microsoft 的已知資料夾定義中,ProgramData 也被定為 提供給所有使用者的應用程式資料,適合放不會漫遊的共用資料。[3]
這裡最該避免的,是 把每位使用者的執行階段資料放進 Program Files。
設定檔的分工和權限設計會一口氣亂掉。
3.2 Public 和 Default 角色不同
這裡也很容易混淆。
flowchart LR
A["C:\Users"] --> B[Default]
A --> C[Public]
A --> D[各個使用者]
B --> B1[建立新設定檔的種子]
C --> C1[所有使用者都看得到的共用物]
D --> D1[個別使用者的實體]
圖 6: Default 是新建的種子,Public 是共用區域,各使用者資料夾才是個別的實體。
- Default 是用來建立新設定檔的範本
- Public 是給所有使用者看的共用區域
- 各使用者資料夾 是那個人專屬的實體
這三者看起來像,角色卻完全不同。
4. 梳理設定檔的種類
同樣叫「設定檔」,維運上至少可以分成下面幾種。
flowchart TD
A[Windows 的設定檔] --> B[本機設定檔]
A --> C[漫遊設定檔]
A --> D[Mandatory 設定檔]
A --> E[Temporary 設定檔]
A --> F[FSLogix 設定檔容器]
圖 7: 維運上的設定檔,從本機到 FSLogix 至少分成五種。
4.1 本機設定檔
一般的電腦預設就是這一種。
- 建立在該台電腦的本機磁碟上
- 不會自動帶到其他電腦
- 單機使用時最單純
Microsoft 也說明,Windows 預設會建立 本機使用者設定檔。[14]
4.2 漫遊設定檔
Microsoft Learn 說明,漫遊使用者設定檔會存放在伺服器共用位置,讓多台電腦都能取得相同的 OS 與應用程式設定。[4][5]
flowchart LR
A[共用伺服器上的設定檔] <--> B[PC-A]
A <--> C[PC-B]
A <--> D[PC-C]
圖 8: 漫遊設定檔是讓多台電腦取得共用伺服器上同一份設定檔的機制。
不過,實務上有以下幾個注意事項。
- 登入/登出時的複製與同步容易變慢
AppData\Local裡帶著大量資料會很難處理- 容易受到 OS 版本差異的影響
- 強烈受到共用路徑與網路品質的影響
4.3 Mandatory 設定檔
Mandatory 設定檔是 由管理者建立的「不會被保存的漫遊設定檔」。[7][8]
依照 Microsoft 的說明,Mandatory 設定檔即使使用者在工作階段中做了變更,也不會像一般的漫遊設定檔那樣被保存下來。[7]
此外,Win32 的文件還說明:
- 把
NTUSER.DAT改名為NTUSER.MAN就會變成 Mandatory - 把設定檔路徑的資料夾名稱結尾改成
.man就會變成 Super-mandatory
以上都寫在文件中。[8]
flowchart LR
A[管理者準備好的設定檔] --> B[使用者登入]
B --> C[使用期間可以變更]
C --> D[登出]
D --> E[不保存變更]
圖 9: Mandatory 是管理者準備的設定檔,登出時不會保存使用期間的變更。
舉例來說,適合以下用途。
- 教育用電腦
- 櫃台接待用電腦
- 自助服務機
- 每次都想回到乾淨狀態的共用電腦
4.4 Temporary 設定檔
Temporary 設定檔 不是設計時主動選擇的東西,而是發生錯誤、無法載入原本設定檔時出現的暫避位置。[9]
Microsoft Learn 說明,在錯誤條件下無法載入原本的設定檔時會發出 Temporary profile,工作階段結束時會被刪除,變更也會遺失。[9]
flowchart TD
A[開始載入正常設定檔] --> B{能不能載入}
B -->|Yes| C[正常登入]
B -->|No| D[以 Temporary 設定檔登入]
D --> E[還是可以作業]
E --> F[登出後變更消失]
圖 10: Temporary 是載入失敗時的暫避位置,登出之後變更就會消失。
也就是說,正跑在 Temporary 設定檔上的狀態,本身就是異常的訊號。
4.5 FSLogix 設定檔容器
Microsoft Learn 把 FSLogix 說明成 讓 Windows 使用者設定檔體驗在虛擬桌面環境中保持一致的機制。[13]
FSLogix 設定檔容器的做法是 把整份使用者設定檔放進 VHD / VHDX,登入時掛載它,讓它看起來像原生的設定檔。[13][14]
flowchart LR
A[VHD / VHDX 上的設定檔] --> B[登入時掛載]
B --> C[在工作階段主機上顯示為 C:\Users\使用者]
C --> D[登出時卸離]
圖 11: FSLogix 在登入時掛載 VHD 上的設定檔,讓它看起來像原生的。
在 Azure Virtual Desktop 上,Microsoft 建議使用 FSLogix profile containers。[14]
5. 漫遊設定檔、Folder Redirection、FSLogix 差在哪裡
這三者常被當成同一件事來談,但角色不同。
flowchart TD
A[把使用者的狀態帶著走] --> B[漫遊設定檔]
A --> C[Folder Redirection]
A --> D[FSLogix]
B --> B1[整份設定檔收到共用位置]
C --> C1[只把已知資料夾移到別處]
D --> D1[掛載 VHD/VHDX]
圖 12: 三種方式帶著走的範圍不同,是整份、只有已知資料夾,還是做成容器。
配合 Microsoft Learn 的整理,這樣看差異會比較清楚。[4][5][14]
| 方式 | 帶著走的是什麼 | 適合的場合 | 容易變麻煩的地方 |
|---|---|---|---|
| 漫遊設定檔 | 整份設定檔 | 傳統的網域環境 | 設定檔過大、同步延遲、版本差異 |
| Folder Redirection | Documents 等已知資料夾 | 想集中管理文件 | 管不到應用程式設定 |
| FSLogix | 把整份設定檔做成容器 | RDS / VDI / AVD | 儲存設計、同時連線、共用權限設計 |
5.1 Folder Redirection 只搬「已知資料夾」
在 Microsoft Learn 中,Folder Redirection 是 把 known folder 的路徑指向別的位置 的機制。[4]
例如把 Documents 收到檔案共用位置後,使用者看起來和本機一樣,實體卻在別的地方。[4]
flowchart LR
A[Documents] --> B[實體在檔案共用位置]
C[Desktop] --> D[需要的話另外設定]
E[AppData] --> F[維持原樣或改用其他方式]
圖 13: Folder Redirection 不是搬整份設定檔,而是以資料夾為單位換位置。
也就是說,Folder Redirection 不是整份設定檔的替代方案,而是以資料夾為單位的重新配置。
5.2 漫遊設定檔不要跨 OS 世代隨手混用
Microsoft 說明,Windows 10 / Server 2016 以後的漫遊設定檔,與更早的 Windows 並不相容。[6]
flowchart LR
A[Windows 7 / 8.1 系列] -.注意混用.-> B[同一個共用位置]
C[Windows 10 / Server 2016 以後] -.注意混用.-> B
B --> D[不一致 / 開始功能表異常 / 工作列異常的原因]
圖 14: 把不同 OS 世代的漫遊設定檔混在同一個共用位置,會造成不一致。
這裡重要的是:
- 依 OS 世代區分設定檔版本
- 不要以為「同一位使用者所以用同一個資料夾就好」
- 電腦部署或汰換時,把 設定檔的相容性 納入遷移計畫
就是以上這幾點。[6]
6. 開發者與維運人員應該先決定的儲存位置
設定檔的討論最後都會回到這裡。 就是 什麼東西放到哪裡。
flowchart TD
A[想儲存的資料] --> B{是使用者建立的產出物嗎}
B -->|Yes| C[Documents 等]
B -->|No| D{是該台電腦固有的嗎}
D -->|Yes| E[%LOCALAPPDATA%]
D -->|No| F{是每位使用者的設定嗎}
F -->|Yes| G[%APPDATA%]
F -->|No| H{是所有使用者共用的可變資料嗎}
H -->|Yes| I[ProgramData + ACL]
H -->|No| J[重新檢視放置位置]
圖 15: 想儲存的資料,依產出物、電腦固有、使用者設定、共用的順序來分流。
6.1 把使用者建立的檔案與應用程式內部狀態分開
這裡混在一起,備份和遷移都容易出事。
- 使用者會有意識處理的產出物
Documents、Pictures、業務用的儲存資料夾 - 應用程式內部的狀態 設定、快取、縮圖、工作階段資訊、工作檔案
前者是業務資料,後者是應用程式自身的需要。 同樣是「檔案」,處理方式最好分開。
flowchart TB
accTitle: 產出物與應用程式內部狀態的區分
accDescr: 顯示使用者會有意識處理的產出物要當成 Documents 等業務資料,設定與快取等應用程式內部狀態則要當成應用程式自身需要的置放處,兩者若不分開處理,備份與遷移都容易出事的圖。
sp1["要儲存的檔案"] --> sp2["使用者會意識到的產出物"]
sp1 --> sp3["應用程式內部的狀態"]
sp2 -.-> sp4["Documents 等業務資料"]
sp3 -.-> sp5["設定與快取屬於應用程式自身需要"]
圖 16: 同樣是檔案,業務資料和應用程式自身需要的東西,置放處與處理方式都要分開。
6.2 放在 %APPDATA% 的東西
放在這裡的,大致是這些東西。
- 較小的設定
- 每位使用者的偏好設定
- 想在多台電腦上呈現一致的狀態
- 可以跟著設定檔一起帶著走的東西
Fast User Switching 的文件中,也把 FOLDERID_RoamingAppData 列為應用程式專屬資料的置放處。[2]
6.3 放在 %LOCALAPPDATA% 的東西
要收到這一側的,是從「可否重新產生」與「要不要帶著走」的角度來看,應該只留在本機的東西。
- 可以重新產生的快取
- 只在本機才有意義的狀態
- 大型工作檔案
- 重視效能、不想讓它跟著走的東西
在 Known Folders 的定義中,LocalAppData 也就是 %USERPROFILE%\AppData\Local。[3]
6.4 放在 ProgramData 的東西
所有使用者共用、但執行過程中會變動的資料,可以考慮放在 ProgramData 這一側。[3]
例如:
- 共用字典
- 所有使用者共用的定義檔
- 服務與多位使用者共用的可變資料
不過這裡必須 連同 ACL 設計一起 考量。
不是「因為要共用所以先丟 ProgramData」,而是要先決定 誰讀、誰寫。
6.5 想仔細打造預設設定檔時
在映像檔部署時,「想讓所有新使用者都套用相同的初始設定」是很常見的需求。
這時候 不要隨手去動 Default,改用 Microsoft 支援的 CopyProfile 為基礎的做法 比較安全。[12]
flowchart LR
A[以系統管理員帳戶做初始設定] --> B[Sysprep + CopyProfile]
B --> C[套用到 Default profile]
C --> D[之後的新使用者都會套用]
圖 17: 預設設定檔的打造,走 Sysprep 與 CopyProfile 這條路徑。
「把某台電腦的 C:\Users\A 手動複製到另一台電腦的 Default」這種做法,看起來快,之後卻很容易出事。[12]
7. 損壞、變成暫時設定檔、無法同步時的排查方式
這是實務上最讓人頭痛的地方。 而且症狀看起來都差不多,釐清原因時一草率,就很容易追過頭。
7.1 先把症狀分成三類
flowchart TD
A[看起來像設定檔問題] --> B{能不能登入}
B -->|Yes| C{畫面看起來是否被初始化}
B -->|No| D[載入失敗這一類]
C -->|Yes| E[Temporary / 損壞 / 換成別的設定檔]
C -->|No| F{是否只有一部分設定被還原}
F -->|Yes| G[漫遊 / 重新導向 / 同步這一類]
F -->|No| H[可能是個別應用程式的問題]
圖 18: 以能否登入和畫面是否被初始化,把設定檔問題分成三條路。
大致分成以下三類。
- 登入時失敗
- 可以登入,但看起來像被初始化了
- 只有一部分沒有同步
7.2 首先該看的記錄檔
Microsoft Learn 建議,調查設定檔問題時依下列順序查看。[10]
- Application 記錄檔
- User Profile Service 的 Operational 記錄檔
- 必要時看 Diagnostic 記錄檔
- 再不夠就用 ETL 追蹤
具體路徑如下。[10]
- Event Viewer
Applications and Services Logs > Microsoft > Windows > User Profile Service > Operational - 想看更詳細的內容時
... > User Profile Service > Diagnostic
在正體中文版 Windows 的事件檢視器中,左側的樹狀目錄會是 應用程式及服務記錄檔 > Microsoft > Windows > User Profile Service > Operational。從提供者名稱以下仍維持英文。
flowchart LR
A[Application 記錄檔] --> B[Operational 記錄檔]
B --> C[Diagnostic 記錄檔]
C --> D[ETL 追蹤]
圖 19: 調查從 Application 記錄檔開始,依序深入 Operational、Diagnostic 與 ETL 追蹤。
實務上,與其一開始就去修登錄檔或刪資料夾,先從記錄檔抓出「載入失敗」「複製失敗」「存取被拒」「路徑過長」「無法寫入共用位置」這類方向 比較安全。
三份記錄檔分別在「不同的地方」
這是一開始最容易迷路的地方,所以先整理出來。[10]
| 要看的東西 | 位置 | 預設是否啟用 |
|---|---|---|
| Application 記錄檔中的 User Profile Service 事件 | 在 Windows 記錄檔 > 應用程式 中,以來源 User Profiles Service 篩選 |
已啟用 |
| Operational 記錄檔 | 應用程式及服務記錄檔 > Microsoft > Windows > User Profile Service > Operational |
已啟用 |
| Diagnostic 記錄檔 | 同一層級的 Diagnostic |
未啟用。需要手動啟用 |
Diagnostic 記錄檔預設不會出現在樹狀目錄裡。要先在事件檢視器的 [動作] 窗格 > [檢視] > [顯示分析及偵錯記錄檔] 打開,再選取 Diagnostic,然後執行 [啟用記錄檔]。調查結束後,務必改回停用。它是過於詳細的記錄檔,不是可以一直開著的東西。[10]
不開 GUI 也能看到同樣的內容
想提高重現性,或是要調查遠端電腦時,用命令取得比較可靠。與其透過別人轉述事件檢視器的畫面,不如能直接說 請執行這段命令,再把結果傳回來,會快很多。
# 1) 從 Application 記錄檔中只取出 User Profile Service 的事件,由新到舊排列
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'Microsoft-Windows-User Profiles Service'
} -MaxEvents 50 | Select-Object TimeCreated, Id, LevelDisplayName, Message
# 2) 直接查看 Operational 記錄檔
Get-WinEvent -LogName 'Microsoft-Windows-User Profile Service/Operational' -MaxEvents 50 |
Select-Object TimeCreated, Id, LevelDisplayName, Message
# 3) 只篩選出因路徑過長造成的 Event ID 1509
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'Microsoft-Windows-User Profiles Service'
Id = 1509
} | Format-List TimeCreated, Id, Message
這裡有一個陷阱。Application 記錄檔這一側的來源名稱是 Microsoft-Windows-User Profiles Service(Profiles,複數形),Operational 記錄檔的通道名稱則是 Microsoft-Windows-User Profile Service/Operational(Profile,單數形)。複製貼上之後跑不動,通常就是卡在這裡。
Event ID 1509 出現在 Application 記錄檔,而不是 Operational 記錄檔。層級是警告,內文是「Windows 無法將檔案 \\伺服器\共用\... 複製到 C:\Users\...」這種格式的訊息,後面接著 DETAIL - The filename or extension is too long.。最後這一行,就是判定路徑長度為原因的關鍵。[16]
還有一件實務上知道就能省時間的事。Microsoft 明確寫著,User Profile Service 的事件 1530「登錄檔檔案仍被其他應用程式或服務使用中」可以忽略。[10] 追這一條會撲空。
flowchart TB
accTitle: 記錄檔名稱單數形與複數形的陷阱
accDescr: 顯示 Application 記錄檔這一側的來源名稱是 Profiles 複數形,Operational 記錄檔的通道名稱是 Profile 單數形,複製貼上後命令跑不動時多半就是弄錯這兩者的圖。
lg1["命令跑不動"] --> lg2{"用了哪一個記錄檔名稱"}
lg2 -->|"Application 的來源名稱"| lg3["Profiles,複數形"]
lg2 -->|"Operational 的通道名稱"| lg4["Profile,單數形"]
lg3 -.-> lg5["弄錯是最常見的原因"]
lg4 -.-> lg5
圖 20: 兩個看似相同的記錄檔名稱,是複製貼上失敗的常見原因。
7.3 常見原因
NTUSER.DAT / USRCLASS.DAT 的屬性與權限
Microsoft 說明,如果 NTUSER.DAT 或 USRCLASS.DAT 被設成 Read-only,或缺少必要的存取權限,設定檔就可能載入失敗。[11]
這一點不起眼,但漏看就會讓問題拖很久。
flowchart LR
A[載入設定檔] --> B{能不能存取 DAT 檔案}
B -->|No| C[登入失敗 / 初始桌面 / Temporary]
B -->|Yes| D[正常載入]
圖 21: 無法存取 DAT 檔案,就會導致登入失敗或轉為暫時設定檔。
漫遊複製時的路徑過長
Microsoft 的 KB 說明過這樣的例子:共用路徑這一側的伺服器名稱或共用名稱太長,導致複製目的地的整條路徑過長,於是伴隨 Event ID 1509 退回暫時設定檔。[16]
看起來只是單純的路徑長度限制,實際上真正的原因有時是 漫遊目的地的設計本身。
刪除不完整而殘留的登錄檔/資料夾資訊
Microsoft 有一篇範例指令碼的文章,用來 清掉登錄檔和 C:\Users 裡殘留的孤立資訊,避免產生 TEMP 設定檔。[15]
從這裡可以看出,只刪資料夾並沒有結束。
flowchart LR
A[隨手刪掉舊的設定檔] --> B[登錄檔資訊殘留下來]
B --> C[下次登入時出現不一致]
C --> D[造成 TEMP 設定檔或多出來的資料夾]
圖 22: 草率刪除留下的登錄檔資訊,會在下次登入時造成不一致。
7.4 首先該檢查什麼
| 症狀 | 先看哪裡 | 典型原因 |
|---|---|---|
| 登入失敗 | Application / Operational | 登錄區載入失敗、權限、損壞 |
| 桌面被初始化 | Operational / Diagnostic | 轉為 Temporary 設定檔 |
| 漫遊沒有保存 | 共用路徑、事件、版本 | 共用權限、網路、路徑長度、版本差異 |
| 只有新使用者不正常 | 以 C:\Users\Default 為起點的建立過程 |
預設設定檔的問題 |
| 共用電腦上殘骸越積越多 | 刪除原則、Shared PC 設定 | 自動清理不足 |
8. 該選哪一種方式
這裡沒有「唯一正解」。 會隨使用形態而變。
flowchart TD
A[使用形態] --> B[個人專用電腦]
A --> C[加入網域的業務電腦]
A --> D[共用電腦 / 教育用電腦]
A --> E[RDS / VDI / AVD]
B --> B1[以本機為主]
C --> C1[視需要用 Folder Redirection / 漫遊]
D --> D1[Mandatory / Shared PC / cleanup]
E --> E1[FSLogix 為首選]
圖 23: 首選會隨使用形態而變,從以本機為主一路到 FSLogix。
8.1 個人專用電腦
基本上 本機設定檔 就夠了。
- 使用者設定放
AppData - 產出物放
Documents - 需要的話,用 OneDrive 之類的另一層來同步文件
這個組成最單純。
8.2 加入網域的業務電腦
依需求組合下列做法。
- 想集中管理文件資料 → Folder Redirection
- 想讓多台電腦也帶著相同的設定 → 漫遊設定檔
- 有 OS 混用或大型設定檔 → 謹慎設計,或重新檢視方式
Microsoft Learn 也提到,Folder Redirection 與 Roaming User Profiles 有助於集中管理、離線使用,以及讓備份更容易。[4]
8.3 共用電腦/教育用電腦/自助服務機
這種用途下,比起「保留個人化設定」,每次都乾淨還原 更重要。
候選有以下三個。
- Mandatory 設定檔
- Shared PC 模式
- 舊設定檔自動刪除原則
Microsoft 提供 Delete user profiles older than a specified number of days on system restart 這個原則,可以在重新開機時刪除超過指定天數未使用的設定檔。[17]
Shared PC 的指引中也提出,在共用電腦上要搭配帳戶與設定檔的自動管理與刪除。[18]
8.4 RDS / VDI / Azure Virtual Desktop
在這裡,只靠傳統的漫遊設定檔會很吃力的場合很多。
Microsoft 在 Azure Virtual Desktop 上建議使用 FSLogix profile containers,並說明它會在登入時掛載 VHDX / VHD,當成原生的使用者設定檔來處理。[14]
flowchart LR
A[多台工作階段主機] --> B[共用儲存空間]
B --> C[VHDX 中的使用者設定檔]
C --> D[掛載到連線的主機]
圖 24: 多台工作階段主機掛載共用儲存空間上的 VHDX 設定檔來使用。
特別是下列條件下,優先考慮 FSLogix 的價值很高。
- 每次連到的工作階段主機都不同
- 會使用 Outlook / OneDrive / Microsoft 365 系列
- 非持續性 VDI,而且必須把設定檔帶著走
- 漫遊設定檔的登入延遲已經造成問題
9. 常見的誤解
9.1 「只要建立帳戶,設定檔在哪裡都會用同一份」
並非如此。帳戶是識別碼,設定檔是那台電腦這一側的實體。 要帶著走到什麼程度,取決於本機、漫遊、Folder Redirection、FSLogix 等方式。[4][14]
9.2 「複製 C:\Users\使用者名稱 就能完成遷移」
草率的複製很危險。
- OS 版本相容性
NTUSER.DAT- 權限
- 應用程式專屬的狀態
- 與預設設定檔互相干擾
以上都是原因。特別是有 OS 世代差異的漫遊,Microsoft 也以區隔設定檔版本為前提。[6]
flowchart TB
accTitle: 草率複製遷移為何危險
accDescr: 顯示把使用者資料夾草率複製過去的遷移方式,會留下 OS 版本相容性、NTUSER.DAT、權限、應用程式專屬狀態,以及與預設設定檔互相干擾等問題,因此很危險的圖。
mv1["整個資料夾複製過去"] --> mv2["看起來像遷移成功了"]
mv2 -.-> mv3["OS 相容性與 NTUSER.DAT 的問題還在"]
mv2 -.-> mv4["權限與預設設定檔互相干擾"]
mv3 --> mv5["變成之後很容易出事的遷移"]
mv4 --> mv5
圖 25: 設定檔不只有資料夾,光靠複製搬不過去。
9.3 「Mandatory 和 Temporary 差不多」
這兩個是不同的東西。Mandatory 是管理者刻意建立的唯讀設定檔,Temporary 則是出錯而讀不到原本設定檔時的暫避位置。[8][9]
9.4 「想同步的話,全部丟進 Roaming 就好」
這樣很危險。把設定和巨大快取放進同一個箱子,登入/登出以及出狀況時的處理都會變重。 想讓它漫遊的東西 和 應該只留在 Local 的東西 分開,維運起來比較輕鬆。[2][3]
9.5 「就算變成暫時設定檔,照用也沒關係」
最好避免。Temporary profile 的前提就是登出時會被清掉, 在這個狀態下繼續作業,就有 把重要資料放到之後會消失的位置 的風險。[9]
10. 總結
Windows 的使用者設定檔,並不只是指 C:\Users 底下的資料夾。
- 檔案群
- 以
NTUSER.DAT為核心的使用者登錄檔 - 那份設定檔放在哪裡、怎麼同步、怎麼刪除的維運方式
把這些都納進來,當成一個設計來想,就更容易看清全貌。
實務上想先掌握的,是以下六點。
- 單機電腦就先以 本機設定檔 為基準來想
- 應用程式的儲存位置要分開
Roaming/Local/ProgramData - 網域環境中不要把 漫遊設定檔 和 Folder Redirection 搞混
- 共用電腦上要考慮 Mandatory / cleanup / Shared PC
- RDS / VDI / AVD 上把 FSLogix 列為首選
- 壞掉時,先看 User Profile Service 的記錄檔
說到底,設定檔的設計不是 「要存到哪裡」,而是「把什麼當成誰的東西、帶著走到什麼程度」 的設計。 這裡定下來之後,電腦部署、Windows 應用程式的設計、故障調查都會輕鬆許多。
flowchart TB
accTitle: 設定檔設計的三個問題
accDescr: 顯示設定檔的設計就歸結為什麼東西放哪裡、帶著走到什麼程度、失敗時怎麼還原這三個問題,這裡定下來之後電腦部署、應用程式設計與故障調查都會變輕鬆的圖。
dq1["什麼東西放哪裡"] --> dq2["帶著走到什麼程度"]
dq2 --> dq3["失敗時怎麼還原"]
dq3 -.-> dq4["部署、設計、調查都變輕鬆"]
圖 26: 能回答這三個問題,設定檔的設計大致就定下來了。
11. 相關文章
12. 與本主題相關的服務
Windows 應用程式開發
使用者設定、日誌、快取、共用資料的儲存位置該怎麼劃分,會大幅左右 Windows 應用程式的維運性與可維護性。 如果要從需求梳理一路看到設計、實作與長期維運,這個主題很適合放在 Windows 應用程式開發的脈絡裡討論。
技術諮詢・設計審查
要選本機/漫遊/FSLogix 的哪一種、既有電腦的維運要怎麼調整、儲存位置要怎麼劃分,實作前有沒有先梳理過,差距相當大。 如果想從方式選定與邊界設計開始梳理,這個主題很容易獨立成技術諮詢・設計審查。
缺陷調查・原因分析
轉為 Temporary 設定檔、登入失敗、登出時儲存失敗,以及共用路徑周邊的原因釐清,和缺陷調查相當合拍。 想從記錄檔、事件、權限、共用架構把難以重現的設定檔問題追究到底時,這裡就是諮詢的入口。
13. 參考資料
出處很多,先放一份 可以從問題點反查的索引。
| 想知道的事 | 要看的出處 |
|---|---|
設定檔的組成要素、NTUSER.DAT |
1、11 |
Roaming / Local / LocalLow / ProgramData 的區分使用 |
2、3、19 |
| 漫遊設定檔與 Folder Redirection 的差異 | 4、5 |
| OS 世代之間的不相容與設定檔版本 | 6 |
| Mandatory 設定檔 | 7、8 |
| Temporary 設定檔 | 9 |
| 用記錄檔釐清原因、ETL 追蹤 | 10 |
| 預設設定檔的自訂 | 12 |
| FSLogix 與 Azure Virtual Desktop | 13、14 |
| 清理殘骸與 TEMP 設定檔 | 15 |
| 路徑過長與 Event ID 1509 | 16 |
| 舊設定檔的自動刪除、Shared PC | 17、18 |
-
Microsoft Learn, About User Profiles (Windows) 使用者設定檔的組成要素、
NTUSER.DAT、Temporary profile 的基本概念。 -
Microsoft Learn, Fast User Switching 應用程式專屬資料用
FOLDERID_RoamingAppData,不會在其他電腦上使用的資料用FOLDERID_LocalAppData的整理方式。 -
Microsoft Learn, KNOWNFOLDERID, CSIDL
%APPDATA%、%LOCALAPPDATA%、LocalLow、ProgramData等已知資料夾的定義。 -
Microsoft Learn, Folder Redirection and Roaming User Profiles in Windows and Windows Server Folder Redirection 與 Roaming User Profiles 的差異,以及集中管理的想法。
-
Microsoft Learn, Deploy roaming user profiles 漫遊設定檔的部署、共用權限、GPO、版本管理的實務步驟。
-
Microsoft Learn, Roaming user profiles of earlier versions of Windows are incompatible with Windows 10, Windows Server 2016, and later versions OS 世代之間的不相容性與設定檔版本管理。
-
Microsoft Learn, Create mandatory user profiles Mandatory user profile 的用途與建立方法。
-
Microsoft Learn, Mandatory User Profiles
NTUSER.MAN、Super-mandatory profile 的定義。 -
Microsoft Learn, Temporary User Profiles Temporary profile 的定義與性質。
-
Microsoft Learn, Troubleshoot user profiles with events 利用 Application / Operational / Diagnostic 記錄檔釐清原因。
-
Microsoft Learn, Error occurs during desktop setup and desktop location is unavailable when you log on to Windows for the first time 以
C:\Users\Default為起點的新設定檔建立過程,以及NTUSER.DAT/USRCLASS.DAT的屬性與權限問題。 -
Microsoft Learn, Customize the default local user profile when you prepare an image of Windows 以
CopyProfile進行受支援的預設設定檔自訂方法。 -
Microsoft Learn, What is FSLogix, Types of Containers FSLogix 的基本概念,以及 Profile Container 的想法。
-
Microsoft Learn, User profile management for Azure Virtual Desktop with FSLogix profile containers, Configure profile containers using FSLogix Azure Virtual Desktop 上的建議做法,以及使用 VHD / VHDX 的設定檔容器方式。
-
Microsoft Learn, Scripts: Clean up profile folder information and prevent TEMP user profiles from being created 孤立的設定檔資訊與 TEMP profile 之間的關係。
-
Microsoft Learn, User profile cannot be loaded with Event ID 1509: DETAIL - The filename or extension is too long 儲存漫遊設定檔時的路徑過長問題。
-
Microsoft Learn, ADMX_UserProfiles Policy CSP
Delete user profiles older than a specified number of days on system restart等原則定義。 -
Microsoft Learn, Configure a shared or guest Windows device Shared PC 模式與共用電腦的帳戶/設定檔管理。
-
Microsoft Learn, Designing Applications to Run at a Low Integrity Level 說明系統為低完整性等級的處理程序準備了
%USERPROFILE%\AppData\LocalLow與HKEY_CURRENT_USER\Software\AppDataLow作為可寫入的位置。
相關文章
共用相同標籤的最新文章。能以相近的主題延伸理解。
快速啟動的真面目 ── Windows 的「關機」為什麼和重新啟動不一樣
Windows 的「關機」預設會變成混合關機,核心與驅動程式被保存到休眠檔,並在下次開機時還原。本文說明為什麼有些問題只有重新啟動才會好、對運作時間・更新・Wake on LAN 的影響、確認方法以及是否停用的判斷。
Time Travel Debugging ── 把長期運轉中無法重現的問題「錄下來」再倒回去
一個月才出現一次的問題,當機傾印只拍得到結果。本文說明如何用 WinDbg 的 Time Travel Debugging(TTD) 錄下執行並倒回,涵蓋 TTD.exe 的錄製設計、環形緩衝區、TTD.Calls 查詢,以及和傾印的分工。
引數為什麼會壞掉 ── Windows 命令列引數的規則
在 Windows 上並不存在引數的陣列,傳給 CreateProcess 的是一條字串,分割由接收端負責。本文說明 CommandLineToArgvW・CRT・.NET 的分割規則,以及 .NET 的 ArgumentList 與 C++ 中正確的組裝方式。
Windows 列印驅動程式停止提供 ── 業務應用程式的報表與標籤列印如何因應
Microsoft 正分階段推動 v3/v4 列印驅動程式的停止提供,從 2026 年 7 月起會優先選用 IPP 類別驅動程式。本文整理 Windows protected print mode 之下會消失哪些東西,並以判斷表梳理業務應用程式的報表、標籤列印中相依處的盤點...
WinRT 就是 COM —— IInspectable、.winmd、語言投影,以及 WinUI 至今仍立在二進位契約之上的原因
WinRT 不是受管理的執行階段,而是在 COM 之上加了中繼資料(.winmd)與語言投影的 ABI。本文從 IUnknown 與 IInspectable 的關係,一路談到桌面應用程式裡 HWND 初始化與 package identity 的卡關之處。
相關主題
與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。
Windows 技術主題
彙整 KomuraSoft LLC 關於 Windows 開發、故障調查與既有資產活用文章的主題中心。
與本主題相關的服務
本文連結到以下服務頁面,歡迎從最接近的入口查看。
Windows 應用程式開發
使用者設定、日誌、快取、共用資料的儲存位置該怎麼劃分,會大幅左右 Windows 應用程式的維運性與可維護性。
技術諮詢 & 設計審查
這個主題很適合放在梳理本機/漫遊/FSLogix 方式選定與儲存位置邊界設計的階段一起討論。
常見問題
整理諮詢這個主題時常見的問題。
- NTUSER.DAT 是什麼?
- NTUSER.DAT 是 Windows 使用者設定檔中所包含的使用者登錄區(registry hive)實體檔案。它就放在 C:\Users\使用者名稱 底下,登入時會被載入,並以 HKEY_CURRENT_USER(HKCU)的形式使用。也就是說,使用者設定檔由 Desktop、AppData 等檔案群,以及以 NTUSER.DAT 為核心的登錄檔層這兩層構成。如果 NTUSER.DAT 被設成唯讀屬性,或缺少必要的存取權限,設定檔就會載入失敗,成為登入失敗或轉為暫時設定檔的原因。
- Windows 的使用者設定檔是什麼?和帳戶不一樣嗎?
- 帳戶用來識別「是誰要登入」,使用者設定檔則是那個人工作環境的實體。設定檔不只是 C:\Users\使用者名稱 這個資料夾,而是 Desktop、Documents、AppData 等檔案群,加上名為 NTUSER.DAT 的使用者登錄區的組合。新使用者第一次登入時,會以 C:\Users\Default 為基礎建立新的設定檔。設定要帶著走到什麼程度,取決於本機、漫遊、Folder Redirection、FSLogix 等方式的選擇。
- %APPDATA% 和 %LOCALAPPDATA% 該怎麼區分使用?
- 基本原則是:想讓每位使用者帶著走的設定放在 %APPDATA%(AppData\Roaming),該台電腦專用的快取或暫時性狀態放在 %LOCALAPPDATA%(AppData\Local)。可以重新產生的快取或較大的工作檔案如果跟著漫遊,登入與登出容易變慢,因此要收攏到 Local 這一側。所有使用者共用的可變資料可以考慮 ProgramData,但必須連同「誰讀、誰寫」的 ACL 設計一起規劃。應該避免把每位使用者的執行階段資料放在 Program Files。
- 以暫時設定檔(Temporary profile)登入時該怎麼處理?
- Temporary 設定檔是在發生錯誤、無法載入原本設定檔時發出的緊急替代方案,登出時會被刪除,變更也會遺失。就這樣繼續作業,重要資料有消失的風險,因此是應該盡快脫離的狀態。調查時不要一開始就動 C:\Users,先查看 Application 記錄檔與 User Profile Service 的 Operational 記錄檔,必要時再看 Diagnostic 記錄檔。常見原因包括 NTUSER.DAT / USRCLASS.DAT 的屬性或權限問題、漫遊目的地路徑過長,以及刪除不完整而殘留的登錄檔資訊等。