Windows服务。编辑开始名称

时间:2018-07-02 10:28:13

标签: c# windows-services wmi wmi-service

我需要检查和编辑Windows服务的StartName

我已经通过WMI API建立了该解决方案:

using (var service = new ManagementObject($"Win32_Service.Name = '{my_name}'"))
{
    using (var inParams = service.GetMethodParameters("Change"))
    {
        inParams["StartName"] = value;
        ManagementBaseObject outParams = service.InvokeMethod("Change", inParams, null);
        outParams.Dispose();
    }
}

当我使用已被启动为管理员的Visual Studio通过新的控制台项目应用程序调用此代码时,它运行正常。

但是当我由登录为LocalSystem的Windows服务调用它时,出现了一个异常:

  

System.Management.ManagementException:提供程序加载失败。在   System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus   System.Management.ManagementObject.InvokeMethod(String中的errorCode)   methodName,ManagementBaseObject inParameters,InvokeMethodOptions   选项)...

在这种情况下我错过了什么? Windows服务编辑服务StartName时必须更改什么权限/应用程序状态或必须更改什么?

1 个答案:

答案 0 :(得分:0)

我认为更好的方法是更改​​te注册表中的名称。您可能必须以管理员身份启动Visual Studio。链接:https://stackoverflow.com/a/3887455/637840

WMI上的Change()方法有很多不必要的开销。您可能在某些参数上犯了一个错误,并且可能您的服务寄存器将被破坏。查看只需通过WMI更改名称所需设置的所有内容:https://docs.microsoft.com/es-es/windows/desktop/TermServ/win32-terminalservice-change

无论如何,如果您需要使用WMI一定要这样做。您可以使用ORMi。您在回购中有一个教程,它将向您展示如何进行方法工作。

您也可以将其用作参考:https://medium.com/@luque.nicolas/compare-ormi-and-traditional-net-wmi-implementation-f00db26d10a3