2013-09-04 2 views
2

Есть ли способ узнать, существует ли локальная группа? Мое «лучшее» решение работает, перехватывая исключение. Есть ли способ достичь той же цели, не перехватывая исключения?Элегантный способ проверить, существует ли локальная группа

var machine = Environment.MachineName; 
var server = new DirectoryEntry(string.Format("WinNT://{0},Computer", machine)); 
bool groupExists = true; 
try 
{ 
    server.Children.Find("MyGroup", "group"); 
} 
catch (COMException ex) 
{ 
    if (ex.ErrorCode == -2147022676) 
     groupExists = false; 
    else 
     throw; 
} 

ответ

6

Вы можете попробовать следующий код

 var machine = Environment.MachineName; 
     var server = new DirectoryEntry(string.Format("WinNT://{0},Computer", machine)); 
     bool exists = server.Children.Cast<DirectoryEntry>().Any(d => d.SchemaClassName.Equals("Group") && d.Name.Equals("Administrators")); 
0

В качестве альтернативы можно использовать PrincipalContext класс следующим образом:

using(var local = new PrincipalContext(ContextType.Machine)) 
{ 
    var group = GroupPrincipal.FindByIdentity(local, "MyGroup"); 
    var groupExists = group != null; 
} 
Смежные вопросы