2010-10-08 17 views
11

¿cómo otorgo a un usuario el derecho de LogOnAsService para un servicio?C# Concesión del permiso "Iniciar sesión como servicio" a un usuario de Windows

tengo que hacerlo de forma manual, en el services.msc aplicación que pueda ir al servicio, cambiar la contraseña (ajuste de la misma que existía antes), haga clic en Aplicar y me sale un mensaje:

La cuenta. \ Postgres ha sido concedió el derecho de Iniciar sesión como servicio.

¿Cómo hacer esto desde el código, porque de lo contrario tengo que dar este permiso con la mano cada vez que ejecute la aplicación y esto no es una posibilidad

@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"); 
     } 
    } 

y la lib de LSA por este tipo Willy.

Respuesta

10

Ver Granting User Rights in C#.

Debe invocar las API de LSA mediante P/Invoke, y esa URL tiene una referencia a wrapper class que hace eso por usted. Así que el código que terminan con es simple:

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

suena muy bien, pero me da Win32UnhandledException: El parámetro es incorrecto – bevacqua

+0

@Nico - lo que hace su mirada código como? –

+0

lee mi actualización @original post – bevacqua

Cuestiones relacionadas