Блокировка папок меню Пуск
На самом деле это не вопросы программирования, но я пытаюсь настроить структуру папок в меню "Пуск" в Windows 7. В этой структуре папок есть несколько папок с ярлыками внутри тех, которые указывают на приложения на компьютере.
Я не хочу, чтобы пользователь на компьютере вообще мог связываться с этой структурой папок. Прямо сейчас они могут перемещать, копировать или удалять его из меню "Пуск".
Я нашел изменения в реестре, которые блокируют все меню "Пуск", но я хочу контролировать только определенную папку.
Спасибо!
1 ответ
Если ваши пользователи не являются администраторами на этом компьютере, вы можете просто создать папку в C:\ProgramData\Microsoft\Windows\Start Menu
вместо %appdata%\Microsoft\Windows\Start Menu
, Только администраторы могут редактировать его.
Если это среда, в которой многие пользователи получают права администратора, уловки получаются. Вы должны изменить настройки безопасности NTFS и использовать правильный тип структуры или использовать символическую ссылку.
Проблема заключается в параллельном размещении папок, в которых один редактируется, а другой нет. Это связано с тем, что права на удаление наследуются от родителя. Таким образом, чтобы заставить его работать только с правами ntfs, вы должны удалить все права у родителя (включая наследование), а затем вернуть все папки, кроме не подлежащих восстановлению, их права на более глубокий уровень. Это проблематично, если параллельно с вашей собственной папкой находится много папок, потому что это много работы.
Так что единственная хитрость, которую я нашел, - это создать папку в другом месте и затем связать ее. Вы должны создать какую-нибудь папку C:\MyIndestructibleFolders\MyFolder, а затем удалить все разрешения в MyFolder.
Имейте в виду, что если вы создаете папку, она может наследовать множество разрешений от своих родителей, перезаписывая установленные вами вещи. Лучший способ избежать этого - перейти в "Расширенное" меню безопасности и снять флажок с надписью "Включить наследуемые разрешения от родительского объекта". Если он запрашивает замену или удаление, скажем, удалить. Затем создайте одну запись для администратора с полными правами доступа и одну для пользователей домена или пользователей с настройками чтения по умолчанию. Я также установил его "только для чтения" в графическом интерфейсе, но это влияет только на детей, поэтому может не понадобиться.
Теперь вы создаете символическую ссылку, чтобы эта папка отображалась в меню "Пуск". Откройте cmd и введите
mklink /D "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Folder" C:\MyIndestructibleFolders\MyFolder
Теперь перейдите к перекрестку в проводнике, а также удалите все разрешения. Просто добавьте полный доступ для администратора на этот раз, не нужно никаких прав пользователя. Теперь он должен быть виден в меню "Пуск", но быть отменяемым /-перемещаемым
Если вам нужно сделать это на нескольких компьютерах программно, возможно, было бы неплохо изучить icacls.
Стоит отметить, что пользователи могут перетаскивать элементы в эту папку в меню "Пуск". Это неправда. Что произойдет, если вы сделаете так, что в папке AppData пользователя будет создана вторая папка с тем же именем, файл будет перемещен туда, и содержимое обеих папок будет отображаться одновременно.
С технической точки зрения это лучший способ сделать это, но это довольно сложно. Есть еще один более хакерский способ, который вы также можете рассмотреть. Файлы, находящиеся в режиме записи, не могут быть перемещены или удалены. Вы можете создать файл "~Anchor" и сделать его невидимым внутри корня вашей папки. Затем вы можете использовать PowerShell для записи его
$file = [System.io.File]::Open('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Myfolder\~Anchor', 'Open', 'Read', 'None')
из-за имени с ~ это будет первое, что Windows пытается переместить / удалить, чтобы предотвратить операцию. Если вы поместите свой скрипт powershell в папку "Автозагрузка" или создадите запланированное задание, которое при загрузке получит к нему доступ с правами системы, это также должно предотвратить удаление.