0

我需要检查和编辑 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 errorCode) 在 System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options) ...

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

4

1 回答 1

0

我认为更好的方法是更改​​注册表中的名称。您可能必须以管理员身份启动 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。您有一个关于 repo 的教程,它将向您展示如何进行方法工作。

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

于 2018-07-02T12:56:58.743 回答