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