Löschen Sie andere Benutzer userfolder als Administrator Ergebnisse in der Zugriff verweigert

stimmen
2

Ich schrieb ein Werkzeug , das sollte userfolders alten Benutzer nach einigen Sicherheitskontrollen löschen.

Das Problem ist , obwohl ich die Anwendung als Administrator (mit UAC zu minimalen Einstellungen) starten die Anwendung scheint nicht genügend Rechte zu haben ...

Wenn ich versuche , manuell den Ordner im Explorer löschen ich dies als Administrator erhalten promted zu tun und ich klicken sie auf Weiter ( „arbeits“ in meinem Deutsch Version) und es funktioniert wie erwartet, was prooves I / Anmeldungs hat die neccesarry Rechte haben.

Nach einigen Recherchen habe ich ein Manifest und enthalten diese Zeile darin:

<requestedExecutionLevel  level=highestAvailable uiAccess=false />

Ich versuchte es auch mit diesem:

<requestedExecutionLevel  level=requireAdministrator uiAccess=false />

gleiches Ergebnis: für die Minderheit von userdirs es funktioniert, aber die meisten nicht.

Die Funktion , die ich zum Löschen verwenden ist:

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

Dies sind die Ausnahmen ich für zwei verschiedene Benutzer erhalten.

Original (für die Übersetzung siehe unten):

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)

Übersetzt von mir:

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)

Was muss ich tun , um , damit es funktioniert?
Sollte nicht beeing Administrator genug sein?

EDIT:
Zusätzliche Informationen (nicht sicher , falls erforderlich):
Betriebssystem: Windows 7 Enterprise erfolgreich auf eine Samba - Domäne verbunden.
Es ist alle Domänen - Benutzer.
Userprofiles existieren nur lokal.
Ich bin Mitglied einer Domäne - Gruppe „edv“ (Deutsch Äquivalent von „IT“ genannt)
Diese Gruppe der lokalen Administrator - Gruppe des Client hinzugefügt wird, wo meine Anwendung ausgeführt wird .

EDIT:
Erstellt am superuser.com hier

Gelöst Dank auf superuser.com lzam
Sollution:
ich folgende Dinge zu tun hatte:

  1. In Besitz nehmen
  2. Set Rechte
  3. Entfernen Sie den Schreibschutz-Flag
  4. Lösche es

Code:

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

Und für Dateien:

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

Ich musste das tun für alle Dateien und Verzeichnisse rekursiv und war dann in der Lage, sie zu löschen.

Veröffentlicht am 28/08/2014 um 10:03
vom benutzer
In anderen Sprachen...                            

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