获取SQLAgent用户名失败



我有windows控制台程序代码下面应该显示NT权威网络服务但令人惊讶的是它拼写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();
    }

}

根据MSDN页面,这是因为:

当安全子系统对该帐户名进行本地化时,SCM进行本地化不支持本地化名称。因此,您将收到一个本地化的从LookupAccountSid函数获取该帐户的名称,而不是名称当您调用时,该帐户必须是NT AUTHORITYNetworkServiceCreateService或ChangeServiceConfig,与语言环境无关,或者可能会出现意想不到的结果。

从WMO检索名称时获得的值,您正在获得逐字传递给CreateService (AUTHORITYNetworkService)的值。

如果有另一个API需要"AUTHORITYNETWORK SERVICE",我会很惊讶,你能举个例子吗?

相关内容

  • 没有找到相关文章

最新更新