Usuń innych użytkowników userfolder jak wyniki Administrator odmowa dostępu

głosy
2

Napisałem narzędzie, które ma na celu usunięcie userfolders starych użytkowników po kilku kontroli bezpieczeństwa.

Problemem jest to, chociaż ja uruchomić aplikację jako administrator (z UAC na minimalnych ustawieniach) wniosek nie wydaje się mieć wystarczające uprawnienia ...

Gdy próbuję ręcznie usunąć folder w Eksploratorze zostanę promowany to zrobić jako administrator i I kliknij kontynuuj ( „fortsetzen” w mojej wersji niemieckiej) i działa zgodnie z oczekiwaniami, które prooves i / mój login ma prawa neccesarry.

Po niektórych badań I stworzył manifest i zawarte w nim następujący wiersz:

<requestedExecutionLevel  level=highestAvailable uiAccess=false />

Ja też próbowałem z tym:

<requestedExecutionLevel  level=requireAdministrator uiAccess=false />

Taki sam wynik: dla mniejszości userdirs to działa, ale większość nie.

Funkcja używam do usunięcia to:

DirectoryInfo userDir = new DirectoryInfo(usersDir + \\ + user);
userDir.Delete(true);

Są wyjątki dostaję dla dwóch różnych użytkowników.

Oryginalne (tłumaczenia patrz poniżej):

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)

Przetłumaczony przeze mnie:

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)

Co muszę zrobić, aby uczynić to działa?
Gdyby nie beeing administrator wystarczy?

EDIT:
Dodatkowe informacje (nie shure jeśli to konieczne):
System operacyjny: Windows 7 Enterprise pomyślnie przyłączony do domeny Samba.
To wszyscy użytkownicy domeny.
Userprofiles istnieć tylko lokalnie.
Jestem członkiem grupy domeny o nazwie „EDV” (niemiecki odpowiednik „IT”)
to grupa zostanie dodana do lokalnej grupy administratorów klienta, gdzie mój działa aplikacja.

EDIT:
Wysłany superuser.com tutaj

rozwiązać dzięki lzam na superuser.com
sollution:
Musiałem zrobić następujące rzeczy:

  1. Przejąć na własność
  2. prawa zestaw
  3. Usunąć zabezpieczenie zapisu flagę
  4. Usuń to

Kod:

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

I dla plików:

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

Musiałem to zrobić dla wszystkich plików i katalogów rekurencyjnie i był wtedy w stanie je usunąć.

Utwórz 28/08/2014 o 10:03
użytkownik
W innych językach...                            

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