Как запустить и остановить службы, использующие WMI из .NET? - PullRequest
1 голос
/ 15 октября 2010

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

Я нашел хороших и точных ответов за использование класса ServiceController для этого, но я бы хотел использовать WMI, если смогу.

1 Ответ

4 голосов
/ 15 октября 2010

Если вы хотите использовать WMI вместо более интуитивного ServiceController класса, см. эту статью (извините, но у вас есть то, что вы хотите).

Пример кода (обработка ошибок здесь немного жестко запрограммирована на мой вкус):

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;
        }
    }
}
...