gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:50:12 24 4
gpt4 key购买 nike

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

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: Cannot start service X on computer'.'. --> System.ComponentModel.Win32Exception: The service did notstart due to a logon failure.

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

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

最佳答案

这是因为该帐户没有“作为服务登录”权限。您需要使用 LsaAddAccountRights 将此类权限添加到帐户。

关于c# - 以编程方式更改 Windows 服务用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com