我的Windows控制台程序代码应显示 NT Authoroty \ Network Service ,但令人惊讶的是它拼写 NetworkService 没有空格...当我查看帐户时SQLAgent正在运行它确实是网络服务。
为什么此代码会删除空格?由于 NetworkService 不存在,它打破了我的所有解决方案。
PS:我不想硬编码用户;我必须自动获得它。
class Program
{
static string GetSQLAgentUsername()
{
string servicePath = string.Format("Win32_Service.Name='{0}'", "SQLSERVERAGENT");
using (ManagementObject theService = new ManagementObject(new ManagementPath(servicePath)))
{
return theService.Properties["StartName"].Value.ToString();
}
}
static void Main(string[] args)
{
System.Console.WriteLine(GetSQLAgentUsername());
System.Console.ReadKey();
}
}
答案 0 :(得分:2)
根据this MSDN page,这是因为:
虽然安全子系统本地化了此帐户名,但SCM会这样做 不支持本地化名称。因此,您将收到本地化的 LookupAccountSid函数中此帐户的名称,但名称 当你打电话时,帐户必须是NT AUTHORITY \ NetworkService CreateService或ChangeServiceConfig,无论语言环境如何,或者 可能会出现意想不到的结果。
从WMO检索名称时获得的值,您将获得逐字传递给CreateService(AUTHORITY \ NetworkService)的值。
如果有其他API需要“AUTHORITY \ NETWORK SERVICE”,我会感到惊讶,你能举个例子吗?