2010-04-25 2 views

ответ

4

Вы можете сделать это с помощью WMI; добавить ссылку на System.Management.dll и используя утверждение для System.Management пространства имен, а затем вызвать следующий код:

ManagementObjectSearcher mos = 
    new ManagementObjectSearcher(@"root\CIMV2", @"SELECT * FROM Win32_ComputerSystem"); 
foreach (ManagementObject mo in mos.Get()) { 
    Console.WriteLine(mo["Workgroup"]); 
}
+0

Благодарим за редактирование, Ханс. Сначала у него была скрытая обратная косая черта, затем я отредактировал ее, чтобы сделать их дословными строками, но подсветка синтаксиса исчезла. Когда я изменил его назад (мне нравится видеть мой код в цвете), я не понял его совершенно правильно. Я все еще не выделяю, понимаете? – Jono

0

Посмотрите, пожалуйста, here. Вам придется использовать P/Invoke.

0

Я думаю, это могло бы быть то, что вы читаете:

System.Environment.GetEnvironmentVariable("USERDOMAIN") 

Но это не имеет ничего общего с именем рабочей группы. Имя рабочей группы недоступно в среде (вы можете ввести «set» в командной строке, чтобы убедиться в этом).

6

Путь, основанный на реакции Jono, но короче:

public static string GetWorkGroup() 
{ 
    ManagementObject computer_system = new ManagementObject(
       string.Format(
       "Win32_ComputerSystem.Name='{0}'", 
       Environment.MachineName)); 

    object result = computer_system["Workgroup"]; 
    return result.ToString(); 
} 
3

Я попробовал это, используя предложенные здесь варианты WMI, но на моей машине (и нескольких других в моем офисе) это оказалось мучительно медленным (иногда более 5 секунд). В результате я работал с API-интерфейсом «NetGetJoinInformation» (PInvoke.net). Вызов API возвращается очень быстро для меня и делает именно то, что мне нужно.