Среди действий пользователей Windows 11/10 и других версий ОС, которые чаще других приводят к проблемам — действия по изменению прав доступа и владельцев системных файлов и папок с последующими манипуляциями. При этом вернуть исходные значения не всегда столь же легко как поменять их.
В этой инструкции подробно о возможных вариантах возврата исходных разрешений и владельцев для системных файлов и папок Windows, а также дополнительная информация, которая может оказаться полезной в контексте темы.
Способы восстановления разрешений для папок и файлов
Самый часто встречающийся совет по сбросу разрешений для папок и файлов выглядит как команда, запущенная от имени администратора (пример для папки, для файла не следует указывать параметр /t):
icacls "путь_к_папке" /reset /t /c /q
Этот способ имеет право на существование, но не всегда применим: во многих случаях (например, для папки WindowsApps, с которой пользователи пробуют взаимодействовать чаще других и что чаще остального приводит к проблемам) он может лишь усугубить ситуацию, поскольку команда не восстанавливает системные записи разрешений, а лишь восстанавливает на разрешения, унаследованные от родительской папки.
Теперь переходим к вариантам, которые могут сработать, если у вас возникла необходимость восстановления разрешений и владельца папок и файлов.
Предупреждение: ни один из методов не является гарантией возврата работоспособности, более того, есть вероятность, что ситуация ухудшится. Все действия под вашу ответственность.
Восстановление отдельного системного файла
Если проблема возникла с отдельным системным файлов где-либо внутри папки Windows, и он не является критичным для работы системы (то есть его удаление не приводит к невозможности действий в ОС), вы можете выполнить следующие действия:
- Переместить этот файл в другое расположение (чтобы он исчез в своём «родном» расположении, но у нас сохранилась его резервная копия).
- В командной строке, запущенной от имени администратора, по порядку выполнить две команды
dism /online /cleanup-image /restorehealth sfc /scannow
Если в результате вы увидите информацию о том, что были обнаружены и успешно восстановлены повреждённые файлы, проверьте, появился ли файл, с которым возникла проблема.
Если да — то восстановлен он был с нужными разрешениями/владельцем. Если нет — верните файл из «резервной копии» в исходное расположение.
Экспорт и импорт ACL
Этот вариант может сработать как для папок, так и для отдельных файлов. Суть: мы можем взять списки прав нужной папки (и вложенных элементов) или файла с рабочего компьютера с такой же версией Windows или из виртуальной машины, после чего использовать их для восстановления разрешений в системе, где столкнулись с проблемами.
Шаги будут следующими:
- В Windows, где записи разрешений верны, запустите командную строку от имени администратора и введите следующую команду (параметр /t — только для папок, для файла не используем):
icacls "C:путь_к_папке" /save "путь_к_файлуразрешения.txt" /t /c
- Перенесите созданный текстовый файл с разрешениями в систему, где возникла проблема.
- Восстановление разрешений из такого файла обычно производится с помощью команды
icacls "C:путь_к_папке" /restore " путь_к_файлуразрешения.txt" /t /c
Однако для системных файлов и папок могут быть восстановлены не все списки разрешений (прав администратора для их восстановления недостаточно). Лучше использовать методы из пунктов 4 или 5.
- Запустите Windows PowerShell от имени Администратора (например, через поиск по «powershell», правый клик — запуск от имени администратора) и по порядку введите команды
$acl = Get-Acl -Path "путь_к_файлуразрешения.txt" Set-Acl -Path " C:путь_к_папке" -AclObject $acl
- Скачайте инструмент командной строки PAExec, после чего нажмите клавиши Win+R на клавиатуре, введите команду
путь_к_PAExec.exe -s -i powershell
и нажмите клавиши Ctrl+Shift+Enter. В результате откроется командная строка. В ней используйте команду
icacls "C:путь_к_папке" /restore " путь_к_файлуразрешения.txt" /t /c
Она будет запущена с необходимыми правами и восстановит разрешения полностью.
Приведённые выше шаги восстановят разрешения, но не владельца. Для восстановления владельца потребуется знать (например, посмотреть в рабочей ОС) владельца по умолчанию и восстановить его с помощью командной строки, например:
- Установка TrustedInstaller в качестве владельца папки:
icacls "путь_к_папке" /setowner "nt servicetrustedinstaller"
- Установка СИСТЕМА в качестве владельца всех вложенных в папку элементов
icacls "путь_к_папке*" /setowner "СИСТЕМА"
Учитывайте, что владельцы у корневой папки и вложенных могут отличаться: например, владелец для WindowsApps — TrustedInstaller, а для вложенных — СИСТЕМА.
Дополнительная информация
В завершение некоторые дополнительные нюансы, которые могут оказаться полезными в контексте рассмотренной темы:
- Разрешения можно восстановить с помощью программы cacls (не icacls), она сработает без ухищрений с PAExec или использования PoweShell, но для каждого элемента придётся использовать её вручную в формате:
cacls "путь_к_элементу" /s:"строка разрешений для элемента из файла со списком ACL (разрешениями)"
- Если вам регулярно приходится менять владельцев и разрешения для системных папок и файлов, вы можете использовать TakeOwnershipEx — при изменениях она сохраняет резервную копию и позволяет восстановить исходные значения.
- Для приложений из WindowsApps может помочь команда PowerShell (но есть риск, что что-то пойдет не так)
Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)AppXManifest.xml" -ErrorAction SilentlyContinue}<.pre>
- Если проблема возникла с папкой WindowsApps на GitHub есть скрипт для автоматического восстановления прав и владельца.
Надеюсь, материал был кому-то полезен. Но, повторюсь, он предлагает не готовые решения, а лишь направления, в которых можно двигаться, если вы столкнулись с проблемой. Конкретные решения могут отличаться, в зависимости от папки или файла.