2

我正在尝试调试一段代码,它更新了用于 Windows 服务的凭据,该服务无法正常工作。它不会抛出异常,只是没有通过检查以表明它已被应用。

MSDN 对构造函数的描述如下:

public Object InvokeMethod(
    string methodName,
    Object[] args
)

我不明白的是它在哪里查找methodName您传入的字符串。我的假设是它会在我尝试更新的服务的代码中查找。Change但是,代码尝试更新的服务中没有方法。

这个 CodeProject 教程似乎还表明,methodName 有一个有效参数列表,因为它使用了源代码中不存在的“create”和“delete”。

String serviceName = "Scan Data Service";

using (ManagementObject service = new ManagementObject(new ManagementPath("Win32_Service.Name='" + serviceName + "'")))
{
    Object[] wmiParams = new Object[11];
    if (arguments == null)
    {
        wmiParams[6] = "LocalSystem";
        wmiParams[7] = "";
    }
    else
    {
        wmiParams[6] = arguments[0]; //Username
        wmiParams[7] = arguments[1]; //Password
    }
    service.InvokeMethod("Change", wmiParams);
}
SelectQuery query = new SelectQuery("select startname from Win32_Service where name = '" + serviceName + "'");

bool updated = false;

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
    foreach (ManagementObject service in searcher.Get())
    {
        String startName = service["startname"].ToString();

        if ((String.Compare(startName, "LocalSystem", true) == 0 && arguments == null) ||
            (arguments != null && String.Compare(startName, arguments[0], true) == 0))
        {
            updated = true;
        }
    }
}

InvokeMethod()是否有适用于所有服务的某个地方的 methodName 参数列表?或者是否应该在我的服务代码中实现某些必须以某种方式读取或反映的东西?

4

1 回答 1

1

解决。

这取决于您使用 WMI 做什么,因为我正在使用它使用Win32_Service 类的服务,它所针对的方法名称属于这个。

当然还有更多的Win32 类,您可以将方法用于不同的任务。

于 2013-03-06T14:08:03.387 回答