Введение в профили пользователей Windows — AppData и NTUSER.DAT
· Обновлено: · Го Комура · Windows, Профиль пользователя, AppData, FSLogix, Перемещаемый профиль, Разработка Windows
История изменений (1 обновлений, последнее 30 Aug 2026)
Журнал изменений этой статьи. Там, где версия до правки была заархивирована, она остаётся доступной для чтения по постоянной ссылке с DOI.
- Русский текст переписан как полноценный технический перевод, а не калька с японского. Утверждения статьи не менялись.
- Первая публикация
Цитирование статьи(DOI: 10.5281/zenodo.21619736)
Статья заархивирована на Zenodo. Ниже приведены DOI, который всегда ведёт к последней версии, и DOI, закреплённый за версией, которую вы читаете.
Го Комура (2026). Введение в профили пользователей Windows — AppData и NTUSER.DAT. KomuraSoft LLC. https://doi.org/10.5281/zenodo.21619736 https://comcomponent.com/ru/blog/2026/03/17/002-windows-user-profile-guide/
- DOI (последняя версия)
- 10.5281/zenodo.21619736
- DOI (эта версия)
- 10.5281/zenodo.21619737
Статья написана как общий обзор для ИТ, которые администрируют Windows, для тех, кто занимается развёртыванием рабочих станций, и для разработчиков Windows-приложений. Схемы — концептуальные. В Markdown-среде с поддержкой Mermaid они отображаются как диаграммы.
Содержание опирается на официальные материалы Microsoft, которые можно было проверить по состоянию на апрель 2026 года. [1][4][7][10][13][14]
Как читать
Статья длинная, поэтому сначала вход по роли.
| Если вы | Начните здесь |
|---|---|
| Хотите за 5 минут понять, что такое профиль | главы 1 и 2 |
| Разработчик и нужно решить, куда приложение сохраняет данные | 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] - Перемещаемый профиль (roaming user profile) — механизм «унести весь профиль на общий ресурс». Folder Redirection — механизм «унести в другое место только известные папки вроде Documents». Это не одно и то же. [4][5]
- Mandatory-профиль — профиль только для чтения: пользоваться можно, сохранять нельзя. Temporary-профиль — аварийный выход при ошибке, и каждый раз его удаляют. [7][8][9]
- Перемещаемый профиль через поколения ОС — зона риска. Windows 10 / Server 2016 и новее несовместимы с более ранними, и версии профиля нужно разделять. [6]
- В RDS / VDI / Azure Virtual Desktop чаще лучше не продавливать только классический перемещаемый профиль, а первым кандидатом держать контейнер профиля FSLogix. Microsoft для Azure Virtual Desktop тоже рекомендует FSLogix. [13][14]
- При сбое разумнее не лезть сразу в
C:\Users, а смотреть журнал Application, Operational / Diagnostic службы User Profile Service, путь общего ресурса и атрибуты с правами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 |
Карта знаний этой статьи
Профиль пользователя Windows состоит из двух слоёв — набора файлов вроде Desktop и AppData и пользовательского куста реестра NTUSER.DAT — и при первом входе создаётся на основе C:\Users\Default. AppData делится на Roaming, Local и LocalLow: настройки, которые должны следовать за пользователем, кэш, привязанный к ПК, и область для процессов с низким уровнем целостности кладут в разные места. Локальный профиль — база; roaming-профиль — когда настройки нужно разделять между несколькими ПК; Folder Redirection — когда централизованно управлять нужно только документами; в RDS/VDI/Azure Virtual Desktop рекомендуется контейнер профиля FSLogix. Mandatory-профиль подходит для учебных мест и киосков; проблемы с правами на NTUSER.DAT и событие 1509 из-за длинного пути — типичные причины перехода на временный профиль.
flowchart LR
accTitle: Карта знаний: профиль пользователя Windows
accDescr: Схема того, как профиль пользователя состоит из NTUSER.DAT и AppData (Roaming/Local/LocalLow), чем различаются способы local, roaming, Mandatory, Temporary и FSLogix, и как событие 1509 из-за длинного пути связано с переходом на временный профиль
windows_user_profile["профиль пользователя"]
ntuser_dat["NTUSER.DAT"]
default_profile["профиль по умолчанию (Default)"]
copyprofile["CopyProfile"]
roaming_appdata["%APPDATA% (Roaming)"]
local_appdata["%LOCALAPPDATA%"]
appdata_locallow["AppData\LocalLow"]
low_integrity_level["низкий уровень целостности"]
local_user_profile["локальный профиль"]
roaming_user_profile["перемещаемый профиль"]
mandatory_profile["обязательный профиль (Mandatory)"]
temporary_profile["временный профиль (Temporary)"]
fslogix_profile_container["FSLogix Profile Container"]
profile_version_incompatibility["несовместимость roaming-профиля между поколениями ОС"]
folder_redirection["Folder Redirection"]
azure_virtual_desktop["Azure Virtual Desktop"]
shared_pc_mode["режим Shared PC"]
profile_auto_cleanup_policy["политика автоудаления старых профилей"]
group_policy["групповая политика"]
event_1509["событие ID 1509 (сбой загрузки профиля из-за длинного пути)"]
user_profile_service_log["журналы User Profile Service"]
windows_user_profile -->|"использует"| ntuser_dat
windows_user_profile -.->|"требует"| default_profile
default_profile -->|"настраивается"| copyprofile
windows_user_profile -->|"использует"| roaming_appdata
windows_user_profile -->|"использует"| local_appdata
windows_user_profile -->|"использует"| appdata_locallow
low_integrity_level -->|"использует"| appdata_locallow
windows_user_profile -.->|"использует"| local_user_profile
windows_user_profile -.->|"использует"| roaming_user_profile
windows_user_profile -.->|"использует"| mandatory_profile
windows_user_profile -.->|"использует"| temporary_profile
windows_user_profile -.->|"использует"| fslogix_profile_container
roaming_user_profile -.->|"может вызвать"| profile_version_incompatibility
mandatory_profile -->|"использует"| ntuser_dat
windows_user_profile -.->|"использует"| folder_redirection
fslogix_profile_container -->|"рекомендуется для"| azure_virtual_desktop
roaming_user_profile -.->|"не рекомендуется"| azure_virtual_desktop
windows_user_profile -.->|"использует"| shared_pc_mode
shared_pc_mode -.->|"использует"| profile_auto_cleanup_policy
profile_auto_cleanup_policy -->|"настраивается"| group_policy
roaming_user_profile -.->|"может вызвать"| event_1509
event_1509 -.->|"может вызвать"| temporary_profile
temporary_profile -->|"проверяется"| user_profile_service_log
ntuser_dat -.->|"может вызвать"| temporary_profile
На схеме сплошная линия обозначает отношение, которое выполняется всегда, а пунктирная — условное отношение (условия указаны в пояснении к каждому отношению на странице сведений). Полный список отношений (всего 24, с доказательствами и степенью уверенности) и определения основных понятий собраны на странице сведений карты знаний (на японском). Данные: JSON-LD / Turtle
2. Что вообще такое «профиль пользователя» Windows
Сначала проще разделить учётную запись и профиль.
flowchart LR
A[Учётная запись пользователя<br/>кто входит в систему] --> B[Профиль пользователя<br/>его настройки и данные]
C[Устройство / ОС] --> 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и т. д. - Слой реестра
HKCU, который появляется после загрузкиNTUSER.DAT
Разговор про «сломанный профиль» путается как раз потому, что бывает поломка только на стороне папок и бывает проблема в кусте реестра. [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. Без отдельного места он вообще ничего не сохранит, поэтому есть зона, куда низкий уровень всё же может писать. Это %USERPROFILE%\AppData\LocalLow и, со стороны реестра, HKEY_CURRENT_USER\Software\AppDataLow. [19]
В таблице это выглядит так.
| Кто пишет | Перемещается ли | |
|---|---|---|
Roaming |
Приложение с обычным уровнем целостности | В зависимости от способа — да |
Local |
Приложение с обычным уровнем целостности | Нет |
LocalLow |
Приложение с низким уровнем целостности | Нет |
Типичный пример — браузер, который намеренно опускает часть, работающую с интернет-содержимым, на более низкие права. Замысел: «даже если этот процесс захватят, ущерб останется внутри LocalLow».
С точки зрения разработчика вывод простой.
- Если своё приложение вы не запускаете с низким уровнем целостности,
LocalLowвам не нужен. ИспользуйтеLocal. - И наоборот: если в
LocalLowпоявляются незнакомые папки, туда пишет что-то, что работает с низким уровнем целостности. Это зацепка при разборе объёма.
Как разделять на практике
| Что нужно сохранить | Первый кандидат | Почему |
|---|---|---|
| Пользовательские настройки | %APPDATA% |
Удобно вести по пользователю |
| Кэш только этого ПК | %LOCALAPPDATA% |
Легко считать, что на другой компьютер это не едет |
| История входов, огромный кэш, миниатюры | %LOCALAPPDATA% |
Если тащить с профилем — вход и выход тяжелеют |
| Документы, которые пользователь создаёт сам | Documents и т. п. |
Это рабочий результат, а не внутреннее состояние приложения |
| Изменяемые данные, общие для всех пользователей | ProgramData |
Они не привязаны к одному пользователю |
ProgramData в определении Known Folders Microsoft тоже описан как данные приложений для всех пользователей — для общих данных, которые не перемещаются. [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 перемещаемый профиль хранится на серверном общем ресурсе, чтобы на нескольких компьютерах пользователь получал те же настройки ОС и приложений. [4][5]
flowchart LR
A[Профиль на общем сервере] <--> B[ПК-A]
A <--> C[ПК-B]
A <--> D[ПК-C]
Рис. 8: Перемещаемый профиль — это получение одного профиля с общего сервера несколькими ПК.
На практике есть такие оговорки.
- Копирование и синхронизация при входе / выходе легко становятся тяжёлыми
- Крупные данные в
AppData\Localздесь особенно болезненны - Легко поймать проблемы из-за разницы версий ОС
- Сильно зависит от пути общего ресурса и качества сети
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 -->|Да| C[Обычный вход]
B -->|Нет| 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. [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 Не смешивайте перемещаемые профили разных поколений ОС
Microsoft пишет: перемещаемые профили Windows 10 / Server 2016 и новее несовместимы с более ранними Windows. [6]
flowchart LR
A[Поколение Windows 7 / 8.1] -.осторожно со смешиванием.-> B[Один и тот же общий ресурс]
C[Windows 10 / Server 2016 и новее] -.осторожно со смешиванием.-> B
B --> D[Причина рассинхрона / сбоев меню «Пуск» / сбоев панели задач]
Рис. 14: Если смешать перемещаемые профили разных поколений ОС на одном общем ресурсе, это становится причиной рассинхрона.
Здесь важно следующее.
- Разделять версии профиля по поколениям ОС
- Не считать, что «это тот же пользователь, значит подойдёт та же папка»
- При развёртывании устройств и замене парка включать в план миграции совместимость профилей
[6]
6. Куда класть данные: это нужно решить разработчику и эксплуатации заранее
Разговор про профили в итоге всегда возвращается сюда. Что и куда класть.
flowchart TD
A[Данные, которые нужно сохранить] --> B{Это результат, который создаёт пользователь?}
B -->|Да| C[Documents и т. п.]
B -->|Нет| D{Это данные именно этого ПК?}
D -->|Да| E[%LOCALAPPDATA%]
D -->|Нет| F{Это настройки конкретного пользователя?}
F -->|Да| G[%APPDATA%]
F -->|Нет| H{Это изменяемые данные, общие для всех пользователей?}
H -->|Да| I[ProgramData + ACL]
H -->|Нет| 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]
C --> D[Дальше применяется ко всем новым пользователям]
Рис. 17: Готовый профиль по умолчанию проводят через Sysprep и CopyProfile.
Способы вроде «вручную скопировать C:\Users\A с одного ПК в Default на другом» выглядят быстрыми, но потом их легко сломать. [12]
7. Как смотреть, если профиль сломан, стал временным или перестал синхронизироваться
Это самое болезненное место в поле. К тому же симптомы похожи, и при грубом разделении легко уйти не туда.
7.1 Сначала делим симптомы на три группы
flowchart TD
A[Похоже на проблему с профилем] --> B{Удаётся войти?}
B -->|Да| C{Выглядит ли всё как сброшенное?}
B -->|Нет| D[Сбой загрузки]
C -->|Да| E[Temporary / повреждение / другой профиль]
C -->|Нет| F{Откатывается только часть настроек?}
F -->|Да| G[Перемещаемый профиль / перенаправление / синхронизация]
F -->|Нет| H[Возможна проблема конкретного приложения]
Рис. 18: По тому, удаётся ли войти и выглядит ли рабочий стол сброшенным, проблемы профиля делятся на три линии.
В целом это три линии.
- Сбой при входе
- Войти можно, но всё выглядит как сброшенное
- Не синхронизируется только часть
7.2 Какие журналы смотреть сначала
В Microsoft Learn при разборе проблем с профилем рекомендуют смотреть в таком порядке. [10]
- Журнал Application
- Журнал Operational службы User Profile Service
- При необходимости — журнал 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]
| Что смотреть | Где | Включён ли по умолчанию |
|---|---|---|
| События User Profile Service в журнале Application | Журналы Windows > Приложение (Windows Logs > Application), фильтр по источнику 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 пишется не в Operational, а в Application. Уровень — предупреждение; текст имеет вид «Windows не может скопировать файл \\сервер\общий_ресурс\... в C:\Users\...», после чего идёт DETAIL - The filename or extension is too long. Именно последняя строка показывает, что причина — длина пути. [16]
Ещё одна вещь, которая экономит время в поле: Microsoft прямо пишет, что событие 1530 службы User Profile Service «файл реестра всё ещё используется другим приложением или службой» можно игнорировать. [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 -->|Нет| C[Сбой входа / рабочий стол по умолчанию / Temporary]
B -->|Да| D[Обычная загрузка]
Рис. 21: Если к файлам DAT нет доступа, это ведёт к сбою входа или к временному профилю.
Длинный путь при копировании перемещаемого профиля
В статье KB Microsoft описан случай, когда из-за длинного имени сервера или общего ресурса итоговый путь назначения становится слишком длинным, и это уходит во временный профиль вместе с 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 / очистка]
E --> E1[FSLogix как первый кандидат]
Рис. 23: В зависимости от характера использования первый кандидат меняется от локального профиля до FSLogix.
8.1 Персональный ПК
Обычно достаточно локального профиля.
- Пользовательские настройки — в
AppData - Результаты работы — в
Documents - При необходимости синхронизация документов отдельным слоем вроде OneDrive
Эта конфигурация самая простая.
8.2 Рабочий ПК в домене
В зависимости от требований комбинируют следующее.
- Нужно централизованно управлять документами → Folder Redirection
- Нужно, чтобы одинаковые настройки ехали между несколькими ПК → перемещаемый профиль
- Есть смешение версий ОС или крупные профили → Осторожное проектирование либо пересмотр способа
В 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 и объясняет, что VHDX / VHD подключается при входе и обрабатывается как нативный профиль пользователя. [14]
flowchart LR
A[Несколько хостов сеансов] --> B[Общее хранилище]
B --> C[Профиль пользователя на VHDX]
C --> D[Подключение к тому хосту, к которому подключились]
Рис. 24: Несколько хостов сеансов подключают профили VHDX с общего хранилища.
FSLogix особенно стоит рассматривать первым кандидатом при таких условиях:
- хост сеанса каждый раз другой
- используются Outlook / OneDrive / Microsoft 365
- в непостоянном (non-persistent) VDI перенос профиля обязателен
- задержка входа из-за перемещаемого профиля уже проблема
9. Частые заблуждения
9.1 «Если создать учётную запись, тот же профиль будет использоваться везде»
Нет. Учётная запись — идентификатор, профиль — фактические данные на стороне устройства. Насколько далеко он едет, зависит от способа: локальный, перемещаемый, Folder Redirection, FSLogix и т. д. [4][14]
9.2 «Чтобы перенести профиль, достаточно скопировать C:\Users\имя_пользователя»
Грубое копирование опасно.
- Совместимость версий ОС
NTUSER.DAT- Права
- Состояние, специфичное для приложений
- Смешение с профилем по умолчанию
Именно поэтому, особенно в перемещаемых профилях между поколениями ОС, Microsoft исходит из разделения версий профиля. [6]
flowchart TB
accTitle: Почему грубый перенос копированием опасен
accDescr: Перенос грубым копированием папки пользователя опасен, потому что остаются проблемы совместимости версий ОС, NTUSER.DAT, прав, состояния приложений и смешения с профилем по умолчанию.
mv1["Скопировать папку целиком"] --> mv2["Кажется, что перенос удался"]
mv2 -.-> mv3["Остаются проблемы совместимости ОС и 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 / очистку / Shared PC
- Для RDS / VDI / AVD первым кандидатом держать FSLogix
- При сбое сначала смотреть журналы службы User Profile Service
В конечном счёте проектирование профиля — это не вопрос «куда сохранять», а вопрос «что чьё и насколько далеко это должно ехать с пользователем». Когда это зафиксировано, развёртывание устройств, проектирование Windows-приложений и разбор сбоев становятся заметно проще.
flowchart TB
accTitle: Три вопроса проектирования профиля
accDescr: Проектирование профиля сводится к трём вопросам: что куда класть, насколько далеко это едет с пользователем и как возвращаться после сбоя; когда ответы есть, проще становятся и развёртывание, и проектирование приложений, и разбор сбоев.
dq1["Что куда класть"] --> dq2["Насколько далеко это едет"]
dq2 --> dq3["Как возвращаться после сбоя"]
dq3 -.-> dq4["Проще развёртывание, проектирование и разбор"]
Рис. 26: Если на три вопроса есть ответы, проектирование профиля почти зафиксировано.
11. Похожие статьи
- Когда Windows действительно требует права администратора — UAC, защищённые области и как это распознать по архитектуре
- Как ускорить проверку разработки Windows-приложений с помощью Windows Sandbox
12. Услуги, связанные с этой темой
Разработка Windows-приложений
Как разделить места хранения пользовательских настроек, логов, кэша и общих данных, сильно влияет на эксплуатацию и сопровождение Windows-приложения. Если нужно пройти путь от сбора требований до проектирования, реализации и долгой эксплуатации, тема хорошо ложится на разработку Windows-приложений.
Посмотреть услугу / Связаться с нами
Техническая консультация и ревью архитектуры
Выбор между локальным профилем, перемещаемым и FSLogix, изменение эксплуатации уже стоящих устройств, границы мест хранения — всё это сильно расходится ещё до реализации, если проработать заранее. Если нужно начать с выбора способа и границ, тему удобно вынести как отдельную техническую консультацию или ревью архитектуры.
Посмотреть услугу / Связаться с нами
Расследование сбоев и анализ причин
Разбор перехода на Temporary-профиль, сбоев входа, ошибок сохранения при выходе и путей к общим ресурсам хорошо сочетается с расследованием сбоев. Это удобная точка входа, когда нужно дожать плохо воспроизводимую проблему профиля по журналам, событиям, правам и конфигурации общего ресурса.
Посмотреть услугу / Связаться с нами
13. Справочные материалы
Источников много, поэтому сначала указатель по теме.
| Что нужно узнать | Смотреть источник |
|---|---|
Состав профиля, NTUSER.DAT |
1, 11 |
Разделение Roaming / Local / LocalLow / ProgramData |
2, 3, 19 |
| Разница между перемещаемым профилем и Folder Redirection | 4, 5 |
| Несовместимость между поколениями ОС и версии профиля | 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 Несовместимость между поколениями ОС и версионирование профилей.
-
Microsoft Learn, Create mandatory user profiles Назначение и способ создания Mandatory-профиля.
-
Microsoft Learn, Mandatory User Profiles Определение
NTUSER.MANи Super-mandatory-профиля. -
Microsoft Learn, Temporary User Profiles Определение и свойства Temporary-профиля.
-
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-профилей.
-
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 — Win32, HRESULT и NTSTATUS
Если появился 0x80004005, сначала разберите код, а не ищите его вслепую. Три системы Win32, HRESULT и NTSTATUS, шаблон 0x8007xxxx как упа...
Как читать «использование памяти» в Windows: Working Set, Private Bytes, Commit и файл подкачки
Столбец «Память» в диспетчере задач, Working Set, Private Bytes и Commit — это разные величины. Разбираем связь виртуальной и физической ...
Защита Windows-приложения от повторного запуска — именованный Mutex и активация окна при втором старте
Разбираем, как в бизнес-приложении Windows запретить повторный запуск через именованный Mutex. Разберём ловушку RDP из-за разницы Global\...
Что такое ClickOnce — как устроен, как обновляется, где подходит и где нет
Разбираем ClickOnce — технологию распространения десктопных .NET-приложений для Windows: манифесты, обновления, кэш, подпись, а также слу...
Как ускорить проверку приложений в Windows Sandbox
Разбираем, как с помощью Windows Sandbox быстрее локализовать проблемы с правами администратора, воспроизводить сценарии в чистом окружен...
Связанные темы
Эти страницы показывают тему статьи в более широком контексте услуг и решений.
Технические темы Windows
Раздел о разработке Windows, расследовании сбоев и использовании существующих активов.
Услуги по этой теме
Статья напрямую связана со следующими услугами.
Разработка приложений для Windows
Как разделить места хранения пользовательских настроек, логов, кэша и общих данных, сильно влияет на эксплуатацию и сопровождение Windows-приложения.
Технические консультации и ревью дизайна
Тема хорошо ложится на этап, где выбирают между локальным профилем, перемещаемым и FSLogix и проводят границы мест хранения.
Частые вопросы
Вопросы, которые часто возникают при консультациях по теме статьи.
- Что такое NTUSER.DAT?
- NTUSER.DAT — это файл куста реестра пользователя (user registry hive) внутри профиля Windows. Он лежит прямо в 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 и Operational-журнал службы User Profile Service, при необходимости Diagnostic. Частые причины: атрибуты или права NTUSER.DAT / USRCLASS.DAT, слишком длинный путь перемещаемого профиля, остатки в реестре после неполного удаления.
Об авторе
Страница с профилем автора статьи.
Го Комура
Представитель KomuraSoft LLC
Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.