我有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",我会很惊讶,你能举个例子吗?