c#向Windows用户授予"作为服务登录"权限

bev*_*qua 12 .net c# windows-services

如何为用户授予服务的LogOnAsService权限?

我需要手动执行此操作,在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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

和这个家伙威利的LSA lib.

Ste*_*end 11

请参阅在C#中授予用户权限.

您必须通过P/Invoke调用LSA API,并且该URL引用了为您执行此操作的包装类.所以你最终得到的代码很简单:

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

  • 帐户名和安全ID之间没有映射,无论如何我得到了Sid,异常是在AddPrivileges()函数的末尾:抛出新的Win32Exception(Win32Sec.LsaNtStatusToWinError((int)ret)); (2认同)