【问题标题】:How does one start and stop services using WMI from .NET?如何从 .NET 使用 WMI 启动和停止服务?
【发布时间】:2010-10-15 00:26:12
【问题描述】:

如何使用 WMI 从 .NET 代码启动、停止和查询本地计算机上的服务? (我使用的是 C#)

我发现 good and accurate answers 使用 ServiceController 类来执行此操作,但如果可以的话,我想使用 WMI。

【问题讨论】:

  • 可以 WMI 做到这一点吗?使用 ServiceController 类有问题吗?当然,WMI 可以从正在执行的进程的角度告诉您有关服务的信息——您可以从那里开始()/终止()该进程,但这似乎是您通过选择不使用跳过了一个非常明显的抽象层服务控制器类。注意:如果我在这里严重错误,请纠正我!
  • @nathan-taylor,你说得对,ServiceController 更干净,我可能会在稍后切换到它。

标签: .net wmi wmi-service


【解决方案1】:

如果您希望在更直观的 ServiceController 类上使用 WMI,请参阅 this article(请原谅配色方案,但它有您想要的)。

示例代码(此处的错误处理根据我的喜好进行了一些硬编码):

using System.Management;

public static ReturnValue StartService(string svcName)
{
    string objPath = string.Format("Win32_Service.Name='{0}'", svcName);
    using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
    {
        try
        {
            ManagementBaseObject outParams = service.InvokeMethod("StartService",
                null, null);
            return (ReturnValue)Enum.Parse(typeof(ReturnValue),
            outParams["ReturnValue"].ToString());
        }
        catch (Exception ex)
        {
            if (ex.Message.ToLower().Trim() == "not found" || 
                ex.GetHashCode() == 41149443)
                return ReturnValue.ServiceNotFound;
            else
                throw ex;
        }
    }
}

【讨论】:

  • 感谢史蒂夫,CodeProject 上的代码完全符合我的要求。
猜你喜欢
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多