Csharp/C#教程:以编程方式更改Windows服务用户分享


以编程方式更改Windows服务用户

我需要以编程方式更改Windows服务的Logon用户。 我使用以下代码来做到这一点:

string objPath = string.Format("Win32_Service.Name='{0}'", ServiceName); using (ManagementObject service = new ManagementObject(new ManagementPath(objPath))) { object[] wmiParams = new object[11]; if (PredefinedAccount) { wmiParams[6] = "LocalSystem"; wmiParams[7] = ""; } else { wmiParams[6] = ServiceUsername; // provided by user wmiParams[7] = ServicePassword; // provided by user } object invokeResult = service.InvokeMethod("Change", wmiParams); // handle invokeResult - no error up to this point } 

此代码适用于90%的情况,但在某些情况下,由于登录失败,无法启动服务。 InvokeMetod通常没有错误,但是当我们尝试启动服务时,我们收到以下错误:

System.InvalidOperationException:无法在计算机’。’上启动服务X. – > System.ComponentModel.Win32Exception:由于登录失败,服务未启动。

解决方案解决方案很简单,我们只需要通过Windows界面输入相同的凭据,问题就解决了。

所以我的问题是,有没有人遇到过与ManagementObject类似的问题,因为在某些情况下它似乎没有将用户名和密码与Windows服务联系起来?

我不确定这个问题是否已经解决。 但我们刚刚遇到了类似的问题,我们发现这是因为该帐户没有“作为服务登录”权限。 您需要使用LsaAddAccountRights向帐户添加此类权限。

请查看这篇文章:

如何在Windows NT中以编程方式管理用户权限

你注意到那些失败中的任何模式吗? 同一台机器? 相同的OS? 相同的用户? 用户是否具有“ 以服务登录 ”或“以交互方式登录”权限? 就个人而言,我不熟悉这种为服务指定用户的方法。 我原本以为你必须重新启动服务,但我猜它不会在90%的时间内正常工作。

上述就是C#学习教程:以编程方式更改Windows服务用户分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1013240.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐