我写了一个工具,它应该在经过一些安全检查后删除旧用户的用户文件夹
问题是虽然我以管理员身份启动应用程序(使用UAC进行最低设置)但应用程序似乎没有足够的权限...
如果我尝试手动删除资源管理器中的文件夹,我会被要求以管理员身份执行此操作,然后单击继续(我的德语版本中的“fortsetzen”)并且它按预期工作,这证明我/我的登录确实具有必要的权利。
经过一些研究后,我创建了一个清单,并在其中包含了这一行:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
我也试过这个:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
同样的结果:对于少数用户来说,它有效,但大多数用户没有
我用来删除的功能是:
DirectoryInfo userDir = new DirectoryInfo(usersDir + "\\" + user);
userDir.Delete(true);
这是我为两个不同用户提供的例外情况。
原文(翻译见下文):
System.UnauthorizedAccessException: Der Zugriff auf den Pfad "COPYING" wurde verweigert.
bei System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
bei System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
bei System.IO.DirectoryInfo.Delete(Boolean recursive)
bei LDAP_Search.Starter.deleteUser(String usersDir, String user)
System.IO.IOException: Der Zugriff auf den Pfad "C:\Users\lennartz\AppData\Local\Microsoft\Windows\Burn\Burn" wurde verweigert.
bei System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
bei System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
bei System.IO.DirectoryInfo.Delete(Boolean recursive)
bei LDAP_Search.Starter.deleteUser(String usersDir, String user)
由我翻译:
System.UnauthorizedAccessException: The access to the path "COPYING" has been denied.
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
at System.IO.DirectoryInfo.Delete(Boolean recursive)
at LDAP_Search.Starter.deleteUser(String usersDir, String user)
System.IO.IOException: The access to the path "C:\Users\lennartz\AppData\Local\Microsoft\Windows\Burn\Burn" has been denied.
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
at System.IO.DirectoryInfo.Delete(Boolean recursive)
at LDAP_Search.Starter.deleteUser(String usersDir, String user)
为了使其正常工作,我需要做什么?
管理员不应该够吗?
编辑:
附加信息(必要时不是舒尔):
操作系统:Windows 7 Enterprise成功加入了samba域
这是所有域用户
Userprofiles仅在本地存在
我是名为“edv”(德语相当于“IT”)的域名组的成员
该组将添加到运行我的应用程序的客户端的本地管理员组中
编辑:
发布于superuser.com here
解决了感谢superz.com上的lzam
Sollution:
我必须做以下事情:
代码:
SecurityIdentifier cu = WindowsIdentity.GetCurrent().User;
var fileS = Directory.GetAccessControl(dir.FullName);
fileS.SetOwner(cu);
fileS.SetAccessRule(new FileSystemAccessRule(cu, FileSystemRights.FullControl, AccessControlType.Allow));
Directory.SetAccessControl(dir.FullName, fileS);
File.SetAttributes(dir.FullName, FileAttributes.Normal);
对于文件:
SecurityIdentifier cu = WindowsIdentity.GetCurrent().User;
var fileS = File.GetAccessControl(dir.FullName);
fileS.SetOwner(cu);
fileS.SetAccessRule(new FileSystemAccessRule(cu, FileSystemRights.FullControl, AccessControlType.Allow));
File.SetAccessControl(dir.FullName, fileS);
File.SetAttributes(dir.FullName, FileAttributes.Normal);
我必须递归地为所有文件和目录执行此操作,然后才能删除它们。