В C #, как я могу запросить список запущенных служб на сервере Windows? - PullRequest
24 голосов
/ 09 мая 2009

Я хочу запросить список служб, запущенных от имени определенного пользователя на удаленной машине, а затем проверить работоспособность каждой из них. Я создаю пользовательскую консоль.

Ответы [ 4 ]

40 голосов
/ 09 мая 2009

ServiceController.GetServices("machineName") возвращает массив объектов ServiceController для конкретной машины.

Это:

namespace AtYourService
{
    using System;
    using System.ServiceProcess;

    class Program
    {
        static void Main(string[] args)
        {
            ServiceController[] services = ServiceController.GetServices();

            foreach (ServiceController service in services)
            {
                Console.WriteLine(
                    "The {0} service is currently {1}.",
                    service.DisplayName,
                    service.Status);
            }

            Console.Read();
        }
    }
}

производит:

The Application Experience service is currently Running.

The Andrea ST Filters Service service is currently Running.

The Application Layer Gateway Service service is currently Stopped.

The Application Information service is currently Running.

etc...

Конечно, я использовал версию без параметров для получения сервисов на моей машине.

24 голосов
/ 09 мая 2009

Чтобы использовать метод ServiceController, я бы проверил решение с олицетворением, реализованное в предыдущем вопросе: .Net 2.0 ServiceController.GetServices ()

FWIW, вот способ C # / WMI с явным хостом, именем пользователя, паролем:

using System.Management;

static void EnumServices(string host, string username, string password)
{
    string ns = @"root\cimv2";
    string query = "select * from Win32_Service";

    ConnectionOptions options = new ConnectionOptions();
    if (!string.IsNullOrEmpty(username))
    {
        options.Username = username;
        options.Password = password;
    }

    ManagementScope scope = 
        new ManagementScope(string.Format(@"\\{0}\{1}", host, ns), options);
    scope.Connect();

    ManagementObjectSearcher searcher = 
        new ManagementObjectSearcher(scope, new ObjectQuery(query));
    ManagementObjectCollection retObjectCollection = searcher.Get();
    foreach (ManagementObject mo in retObjectCollection)
    {
        Console.WriteLine(mo.GetText(TextFormat.Mof));
    }
}
5 голосов
/ 09 мая 2009

Для этого вы можете использовать wmi (System.Management). Вы также можете использовать ServiceController.GetServices().

3 голосов
/ 16 апреля 2015

Это проверит имя службы вашей системы и имя нужного вам сервиса, которое вы можете указать в параметре

namespace ServiceName
{
using System;
using System.ServiceProcess;

class Service
{

public static bool IsServiceInstalled(string serviceName)
{

 ServiceController[] services = ServiceController.GetServices();

 foreach (ServiceController service in services)
 {
   if (service.ServiceName == serviceName)
     return true;
 }
 return false;
   }
 }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...