Tôi có ứng dụng C# quét một thư mục và tập hợp một số thông tin. Tôi muốn hiển thị tên tài khoản cho mỗi tệp. Tôi có thể làm điều này trên hệ thống cục bộ bằng cách SID cho đối tượng FileInfo, và sau đó thực hiện:Làm cách nào để chuyển đổi từ SID sang tên tài khoản trong C#
string GetNameFromSID(SecurityIdentifier sid)
{
NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount));
return ntAccount.ToString();
}
Tuy nhiên, điều này không làm việc cho các tập tin trên mạng, có lẽ vì các Dịch function() chỉ làm việc với tài khoản người dùng cục bộ. Tôi nghĩ có lẽ tôi có thể làm một tra cứu LDAP trên SID, vì vậy tôi thử như sau:
string GetNameFromSID(SecurityIdentifier sid)
{
string str = "LDAP://<SID=" + sid.Value + ">";
DirectoryEntry dirEntry = new DirectoryEntry(str);
return dirEntry.Name;
}
Điều này có vẻ như nó sẽ làm việc, trong đó các quyền truy cập vào "dirEntry.Name" treo cứng trong vài giây, như nếu nó đang đi và truy vấn mạng, nhưng sau đó nó ném một System.Runtime.InteropServices.COMException
Có ai biết làm thế nào tôi có thể nhận được tên tài khoản của một tập tin tùy ý hoặc SID? Tôi không biết nhiều về mạng hoặc LDAP hay bất cứ thứ gì. Có một lớp được gọi là DirectorySearcher mà có lẽ tôi phải sử dụng, nhưng nó muốn có một tên miền, và tôi cũng không biết làm sao để có được điều đó - tất cả những gì tôi có là đường dẫn đến thư mục tôi đang quét.
Xin cảm ơn trước.
Có thông báo cụ thể mà COMException hiển thị không? –
Nó có thể là chính sách nhóm cho phép bạn duyệt qua dịch vụ thư mục cục bộ, đó là lý do tại sao bạn nhận được ngoại lệ COM. Thông báo lỗi cho thấy những gì? Hãy thử chạy filemon trên máy mạng tại sao bạn truy cập vào nó và xem kết quả. –
Tôi có nghĩa là "chính sách nhóm không cho phép ..." –