Не удается получить имя пользователя SQLAgent - PullRequest
0 голосов
/ 12 октября 2011

У меня есть программный код консоли 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 Ответ

2 голосов
/ 22 мая 2012

Согласно этой странице MSDN , это потому, что:

Пока подсистема безопасности локализует это имя учетной записи, SCM делает не поддерживает локализованные имена. Поэтому вы получите локализованный имя для этой учетной записи из функции LookupAccountSid, но имя учетной записи должен быть NT AUTHORITY \ NetworkService, когда вы звоните CreateService или ChangeServiceConfig, независимо от локали, или неожиданные результаты могут произойти.

Значение, которое вы получаете при получении имени из ВМО, вы получаете значение, которое было дословно передано в CreateService (AUTHORITY \ NetworkService).

Я был бы удивлен, если бы был другой API, который требовал "AUTHORITY \ NETWORK SERVICE", не могли бы вы привести пример?

...