如何以编程方式将此Active Directory作为LocalService访问?
问题描述:
尝试从我的Windows服务访问本地ActiveDirectory。如何以编程方式将此Active Directory作为LocalService访问?
我打算尝试使用LocalService
来访问它,它在我以管理员身份在Visual Studio中运行它时起作用,但是当我将它作为实际服务运行时失败。
我需要以某种方式提供SecurityIdentifier
至DirectoryEntry
吗?但是,只需要username
和password
而不是SecurityIdentifier
...
var fqhn = System.Net.Dns.GetHostEntry(Environment.MachineName).HostName;
using (DirectoryEntry root = new DirectoryEntry(string.Format("LDAP://{0}/RootDSE", fqhn)))
{
string ctx = root.Properties["configurationNamingContext"].Value.ToString();
string path = string.Format("LDAP://{0}/CN=Microsoft Exchange,CN=Services,{1}",
fqhn, ctx);
var blah = new DirectoryEntry(path);
}
它给我 System.DirectoryServices.DirectoryServicesCOMException (0x80072030): There is no such object on the server.
,我试图在这两个LocalService
或NetworkService
运行的服务。
答
其实,它看起来像我使用错误的地址访问ActiveDirectory。在我的本地机器上,我用的是:
System.Net.Dns.GetHostEntry(Environment.MachineName).HostName;
但我应该使用域代替:
Environment.UserDomainName
让我有种发的情况下,回退方法的域不存在。 ..
string domain = Environment.UserDomainName;
if (String.IsNullOrEmpty(domain))
domain = System.Net.Dns.GetHostEntry(Environment.MachineName).HostName;
现在连接到LDAP作品:
new DirectoryEntry(string.Format("LDAP://{0}/RootDSE", domain)
只是为了证实@Harry Johnston在其他答复中说过,使用NetworkService
工作! (我回到LocalService
只是为了确保它和我失败)
LocalService和NetworkService都没有权限连接到您的活动目录,因为它们是本地计算机帐户。你可以尝试'System',它将使用AD中的计算机账号,但是你真的应该以AD用户身份运行你的服务,这样你就可以只分配需要的权限。 – Ashigore
嗡嗡声...新的C#在这里,所以没有办法使用系统帐户来阅读AD?我真的想避免创建新用户。在“Active Directory用户和计算机>用户”中,如果我通过“委托控制向导”添加了“网络服务”或“本地服务”,是否可行? – codenamezero
不,因为包括计算机和AD服务器在内的每台计算机都有自己的网络和本地服务帐户。你为什么不想创建一个用户?无论哪种方式,您的计算机上唯一可以访问AD中的内容的帐户是系统(计算机)帐户。 – Ashigore