2010-10-08 3 views
11

Как я могу предоставить пользователю право LogOnAsService для службы?C# Предоставление разрешения «Вход в систему» ​​пользователю Windows

мне нужно сделать это вручную, в services.msc приложение, которое я могу пойти на службу, изменить пароль (установка та же, что было раньше), нажмите кнопку Применить, и я получаю сообщение:

Учетная запись. \ Postgres была предоставлена ​​право входа в систему.

Как это сделать из кода, потому что в противном случае я должен дать это разрешение вручную каждый раз, когда я запустить приложение, и это не возможность

@Steve

static void Main() 
    { 
     // irrelevant stuff 

     GrantLogonAsServiceRight("postgres"); 

     // irrelevant stuff 
    } 

    private static void GrantLogonAsServiceRight(string username) 
    { 
     using (LsaWrapper lsa = new LsaWrapper()) 
     { 
      lsa.AddPrivileges(username, "SeServiceLogonRight"); 
     } 
    } 

и LSA lib этим парнем Вилли.

ответ

10

См. Granting User Rights in C#.

Вы должны вызвать API LSA через P/Invoke, и этот URL имеет ссылку на wrapper class, который делает это за вас. Таким образом, код, который вы в конечном итоге с проста:

private static void GrantLogonAsServiceRight(string username) 
{ 
    using (LsaWrapper lsa = new LsaWrapper()) 
    { 
     lsa.AddPrivileges(username, "SeServiceLogonRight"); 
    } 
} 
+0

звучит замечательно, но я получаю Win32UnhandledException: неправильный параметр – bevacqua

+0

@Nico - то, что делает ваш код выглядит? –

+0

прочитал мое обновление @original сообщение – bevacqua

Смежные вопросы