2010-10-15 2 views
1

Как использовать WMI для запуска, остановки и запросов на локальном компьютере с .NET-кода? (Я использую C#)Как запускать и останавливать службы, используя WMI от .NET?

Я нашел good and accurate answers для использования класса ServiceController для этого, но я бы хотел использовать WMI, если можно.

+1

* Может * WMI сделать это? Есть ли проблема с использованием класса ServiceController? Конечно, WMI может рассказать вам о сервисе с точки зрения выполнения процесса, и оттуда вы можете запустить()/terminate() процесс, но это похоже на то, что вы пропускаете совершенно очевидный уровень абстракции, выбирая не использовать класс ServiceController. Примечание: Пожалуйста, поправьте меня, если я ужасно ошибаюсь! –

+0

@ nathan-taylor, вы правы, ServiceController намного чище, я могу переключиться на это на более позднем этапе. – Boinst

ответ

4

Если вы хотите использовать WMI более интуитивно понятный класс ServiceController, см. 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; 
     } 
    } 
} 
+0

Спасибо, Стив, этот код на CodeProject делает именно то, что я просил. – Boinst