Когда на Windows действительно требуются права администратора — UAC, защищённые области и как это определить на этапе проектирования

· · Windows, UAC, Безопасность, Развёртывание, Разработка Windows

В консультациях, связанных с Windows, часто смешиваются такие темы.

  • Когда действительно требуется «запуск от имени администратора»
  • Почему UAC всё ещё появляется, хотя учётная запись администраторская
  • Всегда ли установка требует прав администратора
  • Нужно ли повышение прав и во время выполнения, если приложение размещено в Program Files
  • На что на практике влияет разница между HKCU и HKLM
  • Как строить приложение, которому права администратора нужны «только для части операций»

Это решается не просто тем, «является ли пользователь администратором». На практике это в значительной мере определяется тем, куда выполняется запись, чью конфигурацию затрагивает изменение и к какому защищённому объекту ОС оно обращается.

В этой статье мы по порядку разберём ситуации, когда в Windows требуются права администратора, начиная с основ UAC, и на практических примерах покажем, где заканчиваются права стандартного пользователя и начинается вопрос повышения прав. Содержание опирается на официальную информацию Microsoft, доступную по состоянию на март 2026 года.12345

1. Сначала — вывод

Сначала перечислим только практические выводы.

  • То, нужны ли в Windows права администратора, определяется не тем, «насколько впечатляюща операция», а тем, «затрагивает ли она ОС или всю машину целиком».14
  • Обработка, ограниченная только собственным профилем, — например, использующая %AppData%, %LocalAppData%, HKCU, Documents, — как правило, обходится без прав администратора.67
  • И наоборот, обработка, затрагивающая всю машину, всех пользователей или защищённые области, — например, Program Files, Windows, System32, общемашинные настройки в HKLM или HKCR, службы Windows, драйверы ядра, брандмауэр, задачи с максимальным уровнем прав, — обычно требует прав администратора.468910
  • Важно понимать: принадлежность пользователя к группе Administrators и то, что приложение сейчас работает с токеном доступа администратора, — это разные вещи. При включённом UAC даже у администратора обычные процессы работают на уровне стандартного пользователя, повышаясь только при необходимости.26
  • Установка не равна обязательным правам администратора. Как в случае per-user установки, при размещении под %LocalAppData% возможна архитектура, позволяющая распространять и обновлять приложение без прав администратора.1112
  • «Приложение, которому почему-то каждый раз нужны права администратора» на деле чаще всего либо записывает runtime-данные в защищённую область, либо декларирует requireAdministrator / highestAvailable в манифесте.413
  • В плане направления развития Windows тоже склоняется к тому, чтобы явно повышать права только в момент необходимости. Функция Administrator protection (предварительная версия) в Windows 11 весьма ясно демонстрирует эту тенденцию.5

В итоге самый практичный взгляд таков: «нужны ли права администратора» определяется не статусом пользователя, а границей, к которой обращается приложение.

2. Что вообще означает «требуются права администратора»

В первую очередь в этом вопросе стоит разделить понятия пользователь и процесс.

UAC в Windows — функция безопасности, предотвращающая несанкционированные изменения ОС. В Microsoft Learn поясняется, что UAC уведомляет при попытке внести изменения, требующие разрешений уровня администратора.1

Кроме того, в официальном описании UAC говорится, что приложения, которым нужен токен доступа администратора, запрашивают согласие конечного пользователя, а дочерние процессы наследуют токен доступа родительского процесса, и родитель с потомком работают на одном уровне целостности.2

Отсюда следуют два вывода.

2.1 Даже «пользователь-администратор» не работает как администратор постоянно

В Microsoft Learn поясняется, что при включённом UAC даже процессы, запущенные членом группы Administrators, выполняются с правами стандартного пользователя, если не были специально повышены.6

Иными словами:

  • ваша учётная запись Windows — администраторская
  • но приложение, только что запущенное двойным щелчком, работает без повышения прав
  • поэтому UAC появляется только в момент операции, требующей прав администратора

— и это нормально.

Вопрос «я же администратор, почему прав всё равно не хватает» — совершенно естественное поведение в Windows.

2.2 Внутри одного процесса нельзя сделать «только эту операцию — вдруг администраторской»

UAC — это не магия на уровне функций, а вопрос того, с каким токеном работает процесс. Поскольку дочерние процессы наследуют токен от родительского, невозможно спроектировать так, чтобы «внутри непривилегированного процесса UI в момент нажатия кнопки отдельные методы того же процесса становились административными».2

Если это необходимо, требуется использовать отдельную единицу выполнения, такую как:

  • выделение отдельного EXE
  • использование службы
  • использование задачи с максимальным уровнем прав
  • использование повышенного COM

14

Если проектировать, не зная этой предпосылки, обычно всё сводится к слегка болезненному запросу вроде «хотим, чтобы только эта кнопка выполнялась от имени администратора».

3. От чего это зависит — как распознать в первую очередь

Самый понятный способ разобраться — по следующим трём линиям.

  1. Куда выполняется запись
  2. Чью конфигурацию затрагивает изменение
  3. Обращается ли операция к объекту, защищаемому ОС

В виде грубой таблицы решений это выглядит так.

Что нужно сделать Типичная цель Права администратора
Сохранение своих настроек, кеша, логов %AppData%, %LocalAppData%, HKCU Как правило, не требуются
Установка / обновление приложения по схеме per-user %LocalAppData% и подобные Иногда можно обойтись без них
Установка / обновление для всех пользователей Program Files, HKLM Обычно требуются
Запись в защищённую область во время выполнения Program Files, Windows, System32, HKLM, HKCR Архитектура, требующая прав
Регистрация / изменение конфигурации службы Windows SCM, конфигурация службы Требуются
Установка драйвера ядра driver / kernel Требуются
Изменение правил Windows Firewall политика брандмауэра Требуется администратор
Выполнение задачи с уровнем HIGHEST Планировщик заданий Предполагает повышение прав

Если сильно обобщить:

  • Изменения для себя обычно укладываются в права стандартного пользователя
  • Изменения для всех обычно затрагивают администратора
  • Обращение к защитным границам ОС требует администратора

Если сначала посмотреть только на эти три пункта, объяснить, «почему появляется UAC», становится намного проще.

4. Типичные случаи, где обычно требуются права администратора

4.1 Установка, обновление и удаление для всех пользователей

В описании архитектуры UAC на Microsoft Learn говорится, что многие установщики пишут в системные каталоги и разделы реестра, у стандартного пользователя нет достаточных прав доступа, и Windows обнаруживает программу установки и запрашивает повышение прав.3

Важный момент здесь: дело не в том, что «установщик привилегирован, потому что он установщик» — повышение прав нужно потому, что место записи является защищённой областью.

Типичные примеры:

  • размещение в Program Files
  • запись общемашинной информации в HKLM
  • регистрация COM или интеграция для всех пользователей
  • установка службы или драйвера
  • наличие общемашинного пути обновления

В таких случаях права администратора чаще всего требуются.38

4.2 Запись runtime-данных в Program Files или HKLM

Это тоже встречается очень часто. В руководстве Microsoft по проектированию UAC поясняется, что ненужного повышения прав следует избегать, а многие старые программы без необходимости требуют прав администратора именно потому, что пишут в HKLM / HKCR или в системные папки Program Files / Windows.4

Кроме того, в описании стандартного пользователя прямо указано, что он не может писать в папку Program Files или HKEY_LOCAL_MACHINE и не может выполнять операции, изменяющие систему.6

То есть если такие

  • файлы настроек
  • логи
  • кеш
  • состояние для каждого пользователя
  • история недавно использованного

данные, изменяющиеся во время выполнения, размещены в папке установки или в HKLM, одного этого уже достаточно, чтобы получить «это приложение не запускается без прав администратора».

И происходит это нередко не потому, что приложение действительно рассчитано на администратора, а просто потому, что неудачно выбрано место хранения.

4.3 Регистрация служб Windows и изменение их конфигурации

Службы находятся под управлением ОС, поэтому, разумеется, их нельзя трогать легкомысленно.

В официальной документации о правах доступа диспетчера управления службами поясняется, что для вызова CreateService нужен SC_MANAGER_CREATE_SERVICE, а открыть дескриптор, пригодный для CreateService, может только процесс с правами администратора.8

Также говорится, что право SERVICE_CHANGE_CONFIG, необходимое для ChangeServiceConfig / ChangeServiceConfig2, позволяет изменить исполняемый файл, который запускает система, и потому должно предоставляться только администраторам.8

Поэтому такие операции, как

  • регистрация службы
  • изменение исполняемого файла или типа запуска службы
  • удаление службы
  • изменение дескриптора безопасности службы

предполагают наличие прав администратора.

4.4 Установка драйвера ядра

В Microsoft Learn поясняется, что стандартный пользователь не может выполнять изменяющие систему задачи, такие как установка драйвера в режиме ядра.6

Это довольно понятная граница. Драйверы работают на стороне ядра, поэтому их нельзя ставить в один ряд с обычным «сохранением настроек пользовательского приложения».

  • установка драйвера устройства
  • установка виртуального или фильтрующего драйвера
  • изменение компонентов, связанных с загрузкой или вводом-выводом

Такие операции разумно считать требующими прав администратора.

4.5 Настройка брандмауэра и задач с высоким уровнем прав

Брандмауэр тоже часть границы безопасности ОС. В инструкциях Microsoft Learn по настройке брандмауэра прямо указано, что для управления Windows Firewall with Advanced Security на отдельном устройстве требуются права администратора на этом устройстве.9

Что касается планировщика заданий, определено, что TASK_RUNLEVEL_LUA выполняется с минимальными правами, а TASK_RUNLEVEL_HIGHEST — с максимальными, а в документации по schtasks указано, что для планирования / просмотра / изменения всех задач на локальном компьютере требуется членство в группе Administrators.10

Подводя итог, такие конфигурации, как

  • добавление или изменение правил Windows Firewall
  • регистрация определённой операции как задачи с максимальным уровнем прав
  • запуск задания от имени другого пользователя или SYSTEM

относятся к тем, где требуются права администратора.

5. Типичные случаи, где права администратора на самом деле часто не нужны

Может казаться, что «Windows сразу требует администратора», но на самом деле частей, которые можно спроектировать без прав администратора, неожиданно много.

5.1 Собственные настройки, кеш и логи

В Microsoft Learn поясняется, что вместо опоры на виртуализацию ради совместимости приложению следует сохранять данные либо в per-user-расположении, либо в общем расположении внутри %alluserprofile% с корректно настроенными ACL.7

На практике удобно разделить так:

  • Специфично для пользователя: %AppData%, %LocalAppData%, HKCU
  • Общее, но обновляемое во время выполнения: %ProgramData% + проектирование ACL
  • Сам исполняемый файл: защищённые области вроде Program Files

Если это разделение выполнено, можно сделать так, что установка самого приложения требует прав администратора, а повседневное использование — нет.

5.2 Установка и обновление per-user

В официальной документации Microsoft примеры размещения per-user встречаются совершенно обычно.

Например, в документации по клиенту удалённого рабочего стола поясняется, что установка per-user выполняется в LocalAppData каждого профиля пользователя, и пользователь может обновлять его без прав администратора.11

А в документации по OneDrive указано, что по умолчанию используется установка per-user, а установка per-machine выполняется командой с флагом /allusers, в результате чего появляется запрос UAC. Кроме того, per-user размещается под %localappdata%, а per-machine — под Program Files.12

Отсюда следует, что само слово «установка» ещё не определяет, нужны ли права администратора.

  • Если каждый пользователь устанавливает в свою область, иногда можно обойтись без прав администратора
  • Если устанавливать в область, общую для всех пользователей, права администратора обычно нужны

Важно заранее решить, per-user это или per-machine.

5.3 Обычные операции UI и бизнес-логика

И наоборот, сама по себе следующая обработка не требует прав администратора.

  • открытие документов и изображений
  • редактирование файлов в собственном профиле
  • HTTP- и DB-коммуникация
  • выполнение бизнес-логики
  • отображение результата на экране
  • чтение и запись собственных настроек

Если несмотря на это требуется «запускать всё приложение от имени администратора», причина чаще всего не в основной функциональности, а в том, что какая-то периферийная операция обращается к защищённой области.

6. Почему говорят «это приложение — только от имени администратора»

6.1 В манифесте задекларировано requireAdministrator

В манифесте приложения через requestedExecutionLevel можно задекларировать требуемый уровень прав. В Microsoft Learn определены следующие три варианта.13

  • asInvoker: работает с теми же правами, что и запускающий процесс
  • highestAvailable: работает с максимально доступными правами
  • requireAdministrator: работает с правами администратора

Если у приложения установлено requireAdministrator, повышение прав предполагается при каждом запуске. Даже при highestAvailable, в зависимости от окружения, тоже может задействоваться повышение прав.13

Поэтому самый прямой ответ на вопрос «почему UAC появляется каждый раз» — потому что это приложение так задекларировано.

6.2 Приложение попадает под определение установщика Windows (installer detection)

В описании архитектуры UAC поясняется, что в Windows есть технология обнаружения установщиков (installer detection), и поскольку многие программы установки пишут в защищённые системные расположения, требуется повышение прав.3

Причём это происходит не просто из-за имени файла вроде setup.exe — Windows в определённой мере эвристически определяет «похоже, это установщик». В официальной документации перечислены такие условия.3

  • 32-битный исполняемый файл
  • отсутствует атрибут requestedExecutionLevel
  • интерактивный процесс, запущенный стандартным пользователем при включённом UAC
  • имя файла содержит слова вроде install, setup, update, и так далее

Поэтому то, что SetupLauncher.exe или Updater.exe внезапно запрашивают повышение прав, с точки зрения архитектуры Windows не является чем-то странным.

6.3 Старое приложение «случайно работало» благодаря виртуализации

Этот момент легко понять неправильно.

В Microsoft Learn поясняется, что UAC предоставляет виртуализацию файлов и реестра для несоответствующих требованиям приложений, которые пытаются писать в защищённые области. При этом прямо указано, что это краткосрочная мера для совместимости, а не долгосрочное решение.37

Кроме того, у виртуализации есть ограничения.

  • не применяется к приложениям с уже повышенными правами
  • применяется только к 32-битным приложениям
  • отключается при наличии манифеста с requestedExecutionLevel
  • изначально приложение следует исправить так, чтобы оно писало в правильное место

37

То есть иногда кажется, будто старое 32-битное приложение «могло писать в Program Files без прав администратора», но на самом деле это может означать лишь то, что запись не выполнялась по-настоящему, а перенаправлялась в VirtualStore.

Поэтому в такие моменты, как

  • переход на 64-бит
  • добавление манифеста
  • изменение способа сборки
  • продвижение к соответствию UAC

«ошибка проектирования места хранения», ранее не проявлявшаяся, может внезапно стать видимой.

6.4 Проблема просто в том, что место обращения во время выполнения выбрано неудачно

На практике в конечном счёте это встречается чаще всего.

  • сохранение настроек рядом с EXE
  • запись логов в папку установки
  • создание временных файлов внутри Program Files
  • запись состояния для каждого пользователя в HKLM

При такой конфигурации получается неудобная форма: само приложение — обычный UI, но для запуска нужны права администратора.46

Случаи, когда администратор нужен не потому, что операция сложна, а потому, что неудачно выбрано место хранения, встречаются очень часто.

7. Как спроектировать приложение так, чтобы избежать лишних повышений прав

7.1 Базовый вариант — asInvoker

Если приложение целиком действительно не является инструментом системного администрирования, базовая линия — запускать обычное UI-приложение без повышения прав. С точки зрения манифеста asInvoker — это декларация «работать с теми же правами, что и запускающий процесс».13

Если запускать от имени администратора вообще всё — повседневные операции с экраном, бизнес-логику, сохранение настроек для каждого пользователя, — увеличиваются такие проблемы:

  • расширяется поверхность атаки
  • становится трудно объяснить эксплуатацию
  • UAC появляется каждый раз
  • становится непонятно, «какой обработке на самом деле нужен администратор»

Руководство Microsoft по проектированию UAC тоже поясняет, что следует устранять ненужное повышение прав, оставляя права администратора только для задач, которым они действительно необходимы.4

7.2 Выносить в отдельную единицу выполнения только обработку, требующую администратора

В Microsoft Learn явно представлены модели, при которых приложение с операциями, требующими прав администратора, всё же работает как приложение стандартного пользователя, выделяя только необходимую часть.14

Четыре типовые модели:

  • Модель Administrator Broker UI-приложение стандартного пользователя + вспомогательный EXE с правами администратора
  • Модель Operating System Service UI стандартного пользователя + резидентная служба
  • Модель Elevated Task UI стандартного пользователя + запланированное задание с максимальным уровнем прав
  • Модель Administrator COM Object UI стандартного пользователя + повышенный COM

Грубое разделение по применению:

  • Если административные операции нужны лишь изредка — вспомогательный EXE
  • Если это постоянно, безнадзорно, часто — служба
  • Для коротких типовых заданий — задача с максимальным уровнем прав
  • Если предполагается существующий COM — повышенный COM

О том, как конкретизировать этот подход для Windows-приложений, подробно рассказано в отдельной статье Как конкретно отделить в Windows-приложении «только операции, требующие прав администратора».

7.3 Исправляем место хранения runtime-данных

Принцип выбора места хранения довольно прост.

  • Данные, специфичные для пользователя, — в HKCU или %AppData%
  • Локальный кеш — в %LocalAppData%
  • Общие, но изменяющиеся во время выполнения данные — в %ProgramData% + ACL
  • Сам исполняемый файл — в Program Files

В Microsoft Learn тоже поясняется, что приложению следует сохранять данные либо в per-user-расположении, либо в %alluserprofile% (фактически ProgramData) с корректно настроенными ACL.7

При таком упорядочивании легче добиться того, чтобы повышались права только у установщика, а сам работающий процесс оставался без повышения.

7.4 Решаем заранее — per-user или per-machine

Этот момент неожиданно часто упускают.

  • Должно ли приложение устанавливаться каждым пользователем самостоятельно
  • Должно ли оно устанавливаться в одно общее для всех пользователей место
  • Кто отвечает за обновления
  • Допустимо ли запускать исполняемый файл из профиля пользователя

Если это решение остаётся неясным, позже легко получить путаницу:

  • установка требует администратора
  • запуск тоже требует администратора
  • обновление тоже требует администратора
  • лишь часть работает в пользовательском контексте

Различие между per-user и per-machine — это не просто вопрос способа распространения, а само проектирование прав.

8. Куда движется Windows в будущем

По состоянию на март 2026 года в Windows 11 есть функция Administrator protection (предварительная версия). В Microsoft Learn эта функция описывается как сохраняющая обычное непривилегированное состояние и предоставляющая права администратора точно в момент необходимости (just-in-time).5

Кроме того, Microsoft поясняет, что перед операциями, требующими прав администратора, — такими как установка ПО, изменение системных настроек вроде времени или реестра, доступ к конфиденциальным данным, — требуется явная аутентификация.5

Сама функция пока в статусе предварительной версии, и её массовое развёртывание тоже идёт поэтапно.5 Но направление довольно ясное.

  • не держать токен администратора постоянно
  • повышать права только в момент необходимости
  • изолировать сессию с повышенными правами
  • яснее фиксировать «когда, какое приложение и почему стало администратором»

Иными словами, разумно ожидать, что архитектура «на всякий случай запускать всё от имени администратора» будет всё хуже сочетаться с будущей Windows.

9. Частые заблуждения

9.1 «Я пользователь-администратор, значит UAC появляться не должен»

Появляется. При включённом UAC даже у членов группы Administrators обычные процессы работают без повышения прав, повышаясь только при необходимости.62

9.2 «Если это установка, права администратора обязательны»

Не обязательно. Как в случае установки per-user в %LocalAppData%, существуют архитектуры, позволяющие распространять приложение без прав администратора.1112

9.3 «Раз приложение размещено в Program Files, настройки тоже можно хранить там»

Нет. Место размещения исполняемого файла и место хранения данных, изменяющихся во время выполнения, следует разделять. Microsoft тоже приводит запись во время выполнения в Program Files или HKLM как типичный пример ненужного повышения прав.47

9.4 «Достаточно запустить от имени администратора, и все проблемы проектирования решатся»

Не решатся. Приложение может временно заработать, но поверхность атаки, эксплуатационность, распространение и удобство поддержки при этом обычно ухудшаются. Более того, удобно повысить права только для части одного и того же процесса тоже нельзя.214

9.5 «Раньше работало, значит и сейчас правильно»

Не обязательно. Если старое 32-битное приложение всего лишь «случайно работало» благодаря виртуализации, проблема проявится при переходе на 64-бит или добавлении манифеста. Виртуализация — временная мера для совместимости, а не долгосрочное решение.37

10. Итог

Нужны ли в Windows права администратора, одной фразой определяется тем, «куда и что именно вы собираетесь изменить».

  • Изменения для себя обычно укладываются в права стандартного пользователя
  • Изменения для всех пользователей / всей машины обычно требуют администратора
  • Обращение к защищённым областям и границам безопасности ОС требует прав администратора

А по-настоящему важно на практике — разделять обработку, которой права администратора действительно нужны, и обработку, которой администратор понадобился просто из-за неудачного выбора места хранения.

Особенно в разработке Windows-приложений весьма эффективны следующие принципы.

  • UI по умолчанию без повышения прав
  • Административная обработка выносится в отдельный EXE / службу / задачу
  • Runtime-данные размещаются в AppData / HKCU / ProgramData
  • per-user или per-machine решается заранее

«Нужны ли права администратора» — это вопрос не о том, насколько внушительно приложение. Это вопрос о том, к какой границе ОС оно обращается.

Если с самого начала держать в голове эту точку зрения, поведение UAC, выбор способа установки и проектирование приложения становятся намного понятнее.

11. Смежные статьи

12. Источники

  1. Microsoft Learn, User Account Control. UAC — функция безопасности, предотвращающая несанкционированные изменения ОС, и уведомляет при изменениях, требующих разрешений уровня администратора.  2 3

  2. Microsoft Learn, How User Account Control works. Приложения, которым нужен токен доступа администратора, подпадают под запрос согласия, а дочерние процессы наследуют токен родительского.  2 3 4 5 6

  3. Microsoft Learn, UAC Architecture. О взаимосвязи защищённых областей, обнаружения установщиков (installer detection), виртуализации и requestedExecutionLevel 2 3 4 5 6 7 8

  4. Microsoft Learn, User Account Control (Design basics). Поясняет, что следует устранять ненужное повышение прав и избегать записи во время выполнения в Program Files / Windows / HKLM / HKCR.  2 3 4 5 6 7 8

  5. Microsoft Learn, Administrator protection (preview). О направлении least privilege / just-in-time elevation в Windows 11.  2 3 4 5

  6. Microsoft Learn, User Account Control for Game Developers. Стандартный пользователь не может писать в Program Files или HKEY_LOCAL_MACHINE и не может выполнять изменяющие систему задачи вроде установки драйвера ядра.  2 3 4 5 6 7 8

  7. Microsoft Learn, Registry Virtualization. Виртуализация — временная мера для совместимости; приложению следует сохранять данные per-user либо в %alluserprofile% с корректно настроенными ACL.  2 3 4 5 6 7

  8. Microsoft Learn, Service Security and Access Rights. О правах доступа, необходимых для CreateService и ChangeServiceConfig, и их связи с правами администратора.  2 3 4

  9. Microsoft Learn, Configure rules with group policy. Для управления Windows Firewall with Advanced Security на отдельном устройстве требуются права администратора.  2

  10. Microsoft Learn, Principal.RunLevel property, TASK_RUNLEVEL_TYPE enumeration, schtasks change. О минимальном / максимальном уровне прав задачи и о правах, необходимых для изменения задач.  2

  11. Microsoft Learn, Install the Remote Desktop client for Windows on a per-user basis with Intune or Configuration Manager. При установке per-user приложение размещается в LocalAppData каждого пользователя и может обновляться без прав администратора.  2 3

  12. Microsoft Learn, Install the sync app per-machine (Windows). OneDrive по умолчанию устанавливается per-user, а установка per-machine через /allusers вызывает запрос UAC и размещает приложение под Program Files 2 3

  13. Microsoft Learn, Application manifests. О значениях asInvoker / highestAvailable / requireAdministrator атрибута requestedExecutionLevel 2 3 4

  14. Microsoft Learn, Developing Applications that Require Administrator Privilege. Систематизирует модели разделения Elevated Task / Service / Administrator Broker / Administrator COM.  2 3

Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.

Эти страницы показывают тему статьи в более широком контексте услуг и решений.

Статья напрямую связана со следующими услугами.

Разработка приложений для Windows

То, где именно в архитектуре отделить обработку, требующую прав администратора, сильно влияет на эксплуатационность и сопровождаемость Windows-приложения, поэтому эта тема хорошо сочетается с разработкой Windows-приложений.

Технические консультации и ревью дизайна

Где провести границы UAC, распространения per-user/per-machine и доступа к защищённым областям — важное проектное решение, которое стоит принимать до реализации, и его удобно прорабатывать в рамках технической консультации и ревью архитектуры.

Частые вопросы

Вопросы, которые часто возникают при консультациях по теме статьи.

Почему появляется сообщение «Для запрошенной операции требуются права администратора»?
Потому что приложение пытается затронуть границу, влияющую на всю ОС или машину целиком. Типичные примеры — запись в защищённые области вроде Program Files, Windows, System32, HKLM, регистрация или изменение конфигурации служб Windows, установка драйверов ядра, изменение правил брандмауэра. Кроме того, повышение прав запрашивается и тогда, когда в манифесте приложения объявлен requireAdministrator, а также когда имя файла содержит install / setup / update и подобные слова и подпадает под определение установщика в Windows (installer detection). Дело не в том, что обработка «продвинутая», — очень часто причина просто в том, что место хранения настроек или логов оказалось в защищённой области.
Почему UAC появляется, даже если я вошёл под учётной записью администратора?
Потому что при включённом UAC даже процессы, запущенные членом группы Administrators, по умолчанию выполняются с правами обычного пользователя, если не были специально повышены. Ваша учётная запись Windows может быть администраторской, но только что запущенное приложение работает без повышения прав, и UAC появляется лишь в момент операции, которая действительно требует прав администратора, — это совершенно естественное поведение Windows. Принадлежность пользователя к группе Administrators и то, что приложение сейчас работает с токеном доступа администратора, — это разные вещи, и их нужно рассматривать раздельно.
Всегда ли установка приложения требует прав администратора?
Не обязательно. Для установки per-user в %LocalAppData% возможна архитектура, позволяющая распространять и обновлять приложение без прав администратора. Например, установка клиента удалённого рабочего стола (Remote Desktop client) по схеме per-user размещается в LocalAppData каждого профиля пользователя и может обновляться без прав администратора, а OneDrive по умолчанию тоже устанавливается по схеме per-user. Права администратора чаще требуются для установки per-machine — для всех пользователей, — которая пишет в Program Files или HKLM. Выбор между per-user и per-machine — это не просто вопрос способа распространения, а часть самого проектирования прав, поэтому его стоит решить в первую очередь.
Можно ли выполнять от имени администратора только часть операций приложения?
Нельзя сделать так, чтобы «в момент нажатия этой кнопки» отдельные методы внутри того же процесса становились административными. UAC определяется тем, с каким токеном работает процесс, а дочерние процессы наследуют токен от родительского. Если это необходимо, нужно выделить отдельную единицу выполнения. Типичные модели — четыре: модель Administrator Broker, сочетающая UI обычного пользователя со вспомогательным EXE с правами администратора; модель Operating System Service с резидентной службой; модель Elevated Task с запланированным заданием максимального уровня прав; и модель Administrator COM Object с повышенным COM.

Об авторе

Страница с профилем автора статьи.

Го Комура

Представитель KomuraSoft LLC

Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.

Публичные ссылки

Вернуться в блог