C# c“授予”;“作为服务登录”;对windows用户的权限

C# c“授予”;“作为服务登录”;对windows用户的权限,c#,.net,windows-services,C#,.net,Windows Services,如何授予用户服务的LogOnAsService权限 我需要手动执行此操作,在services.msc应用程序中,我可以转到该服务,更改密码(设置与以前相同),单击应用,我会收到一条消息: 帐户。\postgres已被删除 已授予“作为服务登录”权限 如何从代码中执行此操作,因为否则每次运行应用程序时都必须手动授予此权限,而这是不可能的 @史蒂夫 static void Main() { // irrelevant stuff GrantLogon

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

我需要手动执行此操作,在services.msc应用程序中,我可以转到该服务,更改密码(设置与以前相同),单击应用,我会收到一条消息:

帐户。\postgres已被删除 已授予“作为服务登录”权限

如何从代码中执行此操作,因为否则每次运行应用程序时都必须手动授予此权限,而这是不可能的

@史蒂夫

    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库。

您必须通过p/invoke调用lsaapi,并且该URL有一个对a的引用,该引用可以为您实现这一点。因此,您最终得到的代码很简单:

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

听起来不错,但是我得到了Win32UnhandledException:参数是incorrect@Nico-你在LSAWrapper的什么地方得到了例外?您可以改用“domain\\name”吗?没有在帐户名和安全ID之间进行映射,不管我如何获取Sid,异常出现在AddPrivileges()函数的末尾:抛出新的Win32Exception(Win32Sec.lsantStatusToInError((int)ret))@Nico-我得到了完全相同的错误,你找到解决方法了吗?Mark发表了这样的评论:“你需要删除“域”部分,只放用户名。它找不到安全ID,除非它只是用户名本身。”@galets:这可能与你有关。