Ответ 1
Чтобы получить текущий домен системы, на которой работает ваша прогама, вы можете использовать System.DirectoryServices.ActiveDirectory.Domain.
Domain domain = Domain.GetComputerDomain();
Console.WriteLine( domain.Name );
Там должен быть простой способ сделать это, я не могу поверить, что нет. Я просмотрел сеть и нашел, например, 20 различных методов, чтобы найти, в каком домене находится текущий пользователь, но ни один не получает домен (или рабочую группу) текущего компьютера.
В неуправляемом С++ это получает:
WKSTA_INFO_100 *buf;
NetWkstaGetInfo(NULL, 100, (LPBYTE*)buf);
domain_name = pBuf->wki100_langroup;
может кто-нибудь мне помочь, если есть способ получить такую же информацию в управляемом С# изначально?
EDIT1: Люди, пожалуйста, прочитайте вопрос. Я НЕ ищу доменное имя пользователя.
Чтобы получить текущий домен системы, на которой работает ваша прогама, вы можете использовать System.DirectoryServices.ActiveDirectory.Domain.
Domain domain = Domain.GetComputerDomain();
Console.WriteLine( domain.Name );
Я работаю над проектом, где пользователи могут быть где угодно; не-доменных пользователей на машине домена, пользователей на машине, не являющейся доменом, напрямую не подключенной к домену в сторонней сети и т.д., поэтому в зависимости от AD уже не стартер.
System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties(). DomainName гораздо надежнее при всех этих условиях.
http://blogs.msdn.com/b/trobbins/archive/2006/01/04/509347.aspx
Imports System.DirectoryServices
Imports System.Net.NetworkInformation
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
MsgBox("Domain: " & ActiveDirectory.Domain.GetComputerDomain.Name)
Catch ex As Exception
MsgBox(ex.GetType.ToString & ": " & ex.Message)
End Try
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try
MsgBox("Domain: " & IPGlobalProperties.GetIPGlobalProperties().DomainName)
Catch ex As Exception
MsgBox(ex.GetType.ToString & ": " & ex.Message)
End Try
End Sub
End Class
Использование GetCurrentDomain совпадает с Environment.UserDomainName, которое работает неправильно, если ваша программа запущена на компьютере домена как пользователь, не являющийся доменом. Я использовал следующий код:
try
{
return System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().Name;
}
catch (Exception)
{
return Environment.UserDomainName;
}
System.Environment.UserDomainName
Если вы не хотите добавлять зависимость к System.DirectoryServices, вы также можете напрямую вызвать NetGetJoinInformation API.