2010-10-08 12 views
11

Wie gewähre ich einem Benutzer das LogOnAsService-Recht für einen Dienst?C# Erteilen der Berechtigung "Anmelden als Dienst" an einen Windows-Benutzer

Ich muss dies manuell tun, in der services.msc app ich in den Dienst gehen, das Passwort ändern (die gleiche Einstellung, dass es vorher war), klicken Sie anwenden, und ich bekomme eine Nachricht:

Der Account. \ Postgres wurde gewährt der Anmeldung als Service richtig.

Wie kann ich tun dies aus dem Code, denn sonst muss ich diese Erlaubnis von Hand geben jedes Mal, wenn ich die Anwendung ausführen und dies ist keine Möglichkeit

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

und die LSA lib von diesem Typen Willy.

Antwort

10

Siehe Granting User Rights in C#.

Sie müssen die LSA-APIs über P/Invoke aufrufen, und diese URL hat einen Verweis auf eine wrapper class, die das für Sie tut. So ist der Code, den Sie mit am Ende ist einfach:

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

klingt großartig, aber ich bekomme Win32UnhandledException: Der Parameter – bevacqua

+0

@Nico falsch ist - was macht Ihr Code aussehen? –

+0

lesen Sie mein Update @ Original-Beitrag – bevacqua

Verwandte Themen