Удалить других пользователей userfolder в качестве результатов администратора в доступе отказано

голоса
2

Я написал инструмент , который , как предполагается удалить userfolders старых пользователей после некоторых проверок безопасности.

Проблема заключается в том, хотя я запустить приложение от имени администратора (с UAC на минимальных настройках) приложение , кажется, не имеет достаточных прав ...

При попытке вручную удалить папку в проводнике я получаю promted сделать это как администратор и я нажмите продолжить ( «fortsetzen» в моей немецкой версии) , и она работает , как и ожидалось, что я доказательствах / мой Логин имеет права neccesarry.

После некоторых исследований я создал манифест и включил эту строку в ней:

<requestedExecutionLevel  level=highestAvailable uiAccess=false />

Я также пробовал с этим:

<requestedExecutionLevel  level=requireAdministrator uiAccess=false />

Тот же результат: для меньшинства UserDirs это работает, но большинство не делает.

Функция я использую для удаления является:

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)

Что мне нужно сделать для того , чтобы заставить его работать?
Если не неоспоримый администратор будет достаточно?

EDIT:
Дополнительная информация (не уверенны в случае необходимости):
ОС: Windows 7 Enterprise успешно присоединен к домену самбы.
Это все пользователи домена.
Userprofiles существуют только на местном уровне.
Я являюсь членом группы домена под названием «КДО» (немецкий эквивалент «IT»)
Эта группа добавляется к локальному администратору группы клиента, где мои работы приложения.

EDIT:
Опубликовано superuser.com здесь

решаемые благодаря lzam на superuser.com
гуманный:
я должен был сделать следующие вещи:

  1. Стать владельцем
  2. Установка прав
  3. Удалить флаг защиты от записи
  4. Удали это

Код:

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);

Я должен был сделать это для всех файлов и директорий рекурсивно и затем смог удалить их.

Задан 28/08/2014 в 10:03
пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more