获取SQLAgent用户名失败

时间:2011-10-12 14:34:29

标签: c# .net visual-studio wmi clr4.0

我的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();
    }


}

1 个答案:

答案 0 :(得分:2)

根据this MSDN page,这是因为:

  

虽然安全子系统本地化了此帐户名,但SCM会这样做   不支持本地化名称。因此,您将收到本地化的   LookupAccountSid函数中此帐户的名称,但名称   当你打电话时,帐户必须是NT AUTHORITY \ NetworkService   CreateService或ChangeServiceConfig,无论语言环境如何,或者   可能会出现意想不到的结果。

从WMO检索名称时获得的值,您将获得逐字传递给CreateService(AUTHORITY \ NetworkService)的值。

如果有其他API需要“AUTHORITY \ NETWORK SERVICE”,我会感到惊讶,你能举个例子吗?