0

这不是一个真正的编程问题,但我正在尝试在 Windows 7 的“开始”菜单中设置一个文件夹结构。这个文件夹结构中有几个文件夹,其中的快捷方式指向计算机上的应用程序。

我根本不希望计算机上的用户能够弄乱该文件夹结构。现在他们可以从开始菜单中移动、复制或删除它。

我发现了锁定整个“开始”菜单的注册表编辑,但我只想控制特定文件夹。

谢谢!

4

1 回答 1

0

如果您的用户不是这台机器上的管理员,您可以只在下面创建文件夹C:\ProgramData\Microsoft\Windows\Start Menu而不是 %appdata%\Microsoft\Windows\Start Menu. 然后只有管理员可以编辑它。

如果这是一个许多用户获得管理员权限的环境,那么事情就会变得棘手。您必须修改ntfs 安全设置并使用正确的结构类型或使用符号链接。

问题是文件夹是并行的,一个是可编辑的,一个是不可编辑的。这是因为删除权限是从父级继承的。因此,要使其仅使用 ntfs 权限,您必须从父级(包括继承)中删除所有权限,然后将除不可删除的文件夹之外的所有文件夹授予更深层次的权限。如果有许多文件夹与您拥有的文件夹并行,这是有问题的,因为这需要大量工作。

因此,我发现完成这项工作的唯一技巧是在不同的地方创建文件夹,然后链接它。您将创建一些文件夹 C:\MyIndestructibleFolders\MyFolder,然后删除 MyFolder 上的所有权限。

请记住,如果您创建一个文件夹,它可能会从其父级继承很多权限,从而覆盖您设置的内容。避免这种情况的最佳方法是转到安全性的“高级”菜单并清除“包括来自该对象的父级的可继承权限”之类的框。如果它要求替换或删除,请说删除。然后使用“完全访问”为您的管理员创建一个条目,并使用默认读取设置为“域用户”或“用户”创建一个条目。我还在 gui 中将其设置为“只读”,但这仅影响儿童,因此可能没有必要。

现在您创建一个符号链接,以便在开始菜单中看到此文件夹。打开cmd并输入

mklink /D "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Folder" C:\MyIndestructibleFolders\MyFolder

现在转到资源管理器中的交界处并删除所有权限。这次只需为管理员添加完全访问权限,无需任何用户权限。它现在应该在开始菜单中可见但不可删除/可移动

如果您必须以编程方式在多台计算机上执行此操作,那么查看icacls可能是个好主意。

需要注意的一件事是,用户似乎仍然可以在开始菜单中将项目拖放到该文件夹​​中。这不是真的。如果您这样做,会在用户 AppData 文件夹中创建第二个同名文件夹,将文件移到那里,并同时显示两个文件夹的内容。

这在 imo 技术上是最好的方法,但它相当复杂。您还可以考虑另一种更hacky的方式。无法移动或删除处于写锁状态的文件。您可以创建一个文件“~Anchor”并使其在文件夹根目录中不可见。然后你可以使用powershell来写锁定它

$file = [System.io.File]::Open('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Myfolder\~Anchor', 'Open', 'Read', 'None')

由于带有 ~ 的名称,这将是 windows 尝试移动/删除的第一件事,因此它将阻止操作。如果您将 powershell 脚本放在 Startup 文件夹中或创建一个在启动时将使用系统权限访问它的调度任务,它也应该防止删除。

于 2015-10-20T08:14:39.767 回答