Ich habe eine C# -Anwendung, die ein Verzeichnis scannt und einige Informationen sammelt. Ich möchte den Kontonamen für jede Datei anzeigen. Ich kann, indem man die SID für das Fileinfo-Objekt auf dem lokalen System dies tun, und dann tun:Wie kann ich von einer SID zu einem Kontoname in C# konvertieren
string GetNameFromSID(SecurityIdentifier sid)
{
NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount));
return ntAccount.ToString();
}
Dies ist jedoch nicht in einem Netzwerk für Dateien funktioniert, vermutlich weil die Translate() Funktion funktioniert nur mit lokale Benutzerkonten Ich dachte, vielleicht könnte ich auf der SID eine LDAP-Lookup, so habe ich versucht, die folgenden:
string GetNameFromSID(SecurityIdentifier sid)
{
string str = "LDAP://<SID=" + sid.Value + ">";
DirectoryEntry dirEntry = new DirectoryEntry(str);
return dirEntry.Name;
}
Dies scheint, wie es funktionieren wird, dass in dem Zugriff auf „dirEntry.Name“ hängt für einige Sekunden, als wenn es abgeht und das Netzwerk abfragt, aber dann wirft es eine System.Runtime.InteropServices.COMException
Weiß jemand, wie ich den Kontonamen einer beliebigen Datei oder SID bekommen kann? Ich weiß nicht viel über Netzwerk oder LDAP oder so. Es gibt eine Klasse namens DirectorySearcher, die ich vielleicht benutzen soll, aber sie möchte einen Domain-Namen, und ich weiß auch nicht, wie ich das bekommen soll - ich habe nur den Pfad zu dem Verzeichnis, das ich scanne.
Vielen Dank im Voraus.
Gibt es eine bestimmte Nachricht, die die COMException zeigt? –
Es könnte eine Gruppenrichtlinie sein und Ihnen erlauben, den Verzeichnisdienst lokal zu durchlaufen, deshalb erhalten Sie die COM-Ausnahme. Was zeigt die Fehlermeldung? Versuchen Sie, filemon auf dem Netzwerkcomputer auszuführen, warum Sie darauf zugreifen und die Ergebnisse sehen. –
Ich meinte "Gruppenrichtlinie nicht erlaubt ..." –