2010-10-08 106 views
11

如何授予用戶LogOnAsService服務權限?c#授予Windows用戶「登錄爲服務」權限

我需要手動執行此操作,在SERVICES.MSC應用程序我可以去服務,更改密碼(設置有以前一樣),點擊Apply,我得到一個消息:

帳戶\ 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#

您必須通過P/Invoke調用LSA API,並且該URL具有對您的wrapper class的引用。所以,你最終的代碼很簡單:

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

聽起來不錯,但我得到Win32UnhandledException:參數不正確 – bevacqua 2010-10-08 18:02:03

+0

@Nico - 什麼是你的代碼是什麼樣子? – 2010-10-08 18:06:07

+0

閱讀我的更新@original post – bevacqua 2010-10-08 18:12:24