Mam aplikację C#, która skanuje katalog i zbiera pewne informacje. Chciałbym wyświetlić nazwę konta dla każdego pliku. Mogę to zrobić w systemie lokalnym poprzez uzyskanie SID dla obiektu FileInfo, a następnie robi:Jak przekonwertować z identyfikatora SID na nazwę konta w języku C#
string GetNameFromSID(SecurityIdentifier sid)
{
NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount));
return ntAccount.ToString();
}
Jednak to nie działa dla plików w sieci, przypuszczalnie dlatego, że Przekłada function() działa tylko z lokalne konta użytkowników. Pomyślałem, że mogę zrobić wyszukiwania LDAP na SID, więc próbowałem następujące:
string GetNameFromSID(SecurityIdentifier sid)
{
string str = "LDAP://<SID=" + sid.Value + ">";
DirectoryEntry dirEntry = new DirectoryEntry(str);
return dirEntry.Name;
}
To wydaje się to będzie działać, że dostęp do „dirEntry.Name” zawiesza się na kilka sekund, a jeśli się wyłącza i wysyła zapytanie do sieci, ale wtedy wyrzuca System.Runtime.InteropServices.COMException
Czy ktoś wie, jak mogę uzyskać nazwę konta dowolnego pliku lub identyfikatora SID? Nie wiem zbyt wiele na temat networkingu, LDAP czy czegokolwiek. Jest klasa o nazwie DirectorySearcher, której być może powinienem użyć, ale chce ona nazwy domeny i nie wiem, jak to uzyskać - wszystko, co mam, to ścieżka do skanowanego katalogu.
Z góry dziękuję.
Czy istnieje szczególny komunikat, który pokazuje wyjątek COMException? –
Może to być polityka grupowa pozwalająca na przechodzenie przez lokalną usługę katalogową, dlatego uzyskujesz wyjątek COM. Co pokazuje komunikat o błędzie? Spróbuj uruchomić filemona na maszynie sieciowej, dlaczego uzyskujesz dostęp do niego i zobaczyć wyniki. –
Miałem na myśli "polityka grupowa nie pozwalająca ..." –