这不是一个真正的编程问题,但我试图在windows 7的开始菜单中设置一个文件夹结构。这个文件夹结构中有几个文件夹,其中的快捷方式指向计算机上的应用程序。
我不希望计算机上的用户能够弄乱这个文件夹结构。现在他们可以从开始菜单中移动、复制或删除它。
我发现注册表编辑锁定整个开始菜单,但我想控制只是特定的文件夹。
谢谢!
如果您的用户不是这台机器上的管理员,您可以在C:ProgramDataMicrosoftWindowsStart Menu
而不是%appdata%MicrosoftWindowsStart Menu
下创建文件夹。只有管理员才能编辑它。
如果这是一个许多用户拥有管理员权限的环境,事情就会变得很复杂。您必须修改ntfs安全设置,并使用正确的结构类型或使用符号链接。
问题是并行文件夹,其中一个是可编辑的,另一个是不可编辑的。这是因为删除权限是从父级继承的。因此,为了使它只具有ntfs权限,您必须从父目录中删除所有权限(包括继承),然后在更深的层次上赋予所有文件夹(但不可删除的文件夹除外)其权限。如果有许多文件夹与你拥有的文件夹并行,这是有问题的,因为这是大量的工作。
所以唯一的技巧,使这个工作,我发现是创建文件夹在不同的地方,然后链接它。你可以创建一个文件夹C:MyIndestructibleFoldersMyFolder,然后删除所有权限。
请记住,如果你创建一个文件夹,它可能会从它的父文件夹继承很多权限,覆盖你设置的东西。避免这种情况的最好方法是进入安全的"高级"菜单,清除写着"包含此对象父对象的可继承权限"之类的框。如果它要求替换或删除,请选择删除。然后创建一个条目为您的管理员与"完全访问"和一个"域用户"或"用户"与默认的读取设置。我还在gui中将其设置为"readonly",但这只影响子节点,因此可能没有必要。
现在创建一个符号链接,以便在开始菜单中看到该文件夹。打开cmd,输入
mklink /D "C:ProgramDataMicrosoftWindowsStart MenuProgramsFolder" C:MyIndestructibleFoldersMyFolder
现在在资源管理器中进入连接处并删除所有权限。这次只需为管理员添加完全访问权限,不需要任何用户权限。它现在应该在开始菜单中可见,但不可删除/-moveable
如果你必须在多台计算机上以编程方式完成此操作,那么查看icacls可能是一个好主意。
需要注意的一点是,用户似乎仍然可以在开始菜单中将项目拖放到该文件夹中。这不是真的。如果这样做,会在用户的AppData文件夹中创建第二个同名的文件夹,文件被移到那里,两个文件夹的内容同时显示。
这在技术上是我认为最好的方法,但是它相当复杂。你也可以考虑另一种更简单的方法。处于写锁状态的文件不能被移动或删除。你可以创建一个名为"~Anchor"的文件,并使其在文件夹根目录中不可见。然后你可以使用powershell来写锁
$file = [System.io.File]::Open('C:ProgramDataMicrosoftWindowsStart MenuProgramsMyfolder~Anchor', 'Open', 'Read', 'None')
因为名字带有~,这将是Windows尝试移动/删除的第一件事,因此它将阻止操作。如果你把powershell脚本放在Startup文件夹中,或者创建一个计划任务,在启动时将以系统权限访问它,它也应该防止删除。