Подтвердить что ты не робот

В С#, как я запрашиваю список запущенных сервисов на сервере Windows?

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

4b9b3361

Ответ 1

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

FWIW, здесь С#/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));
    }
}

Ответ 2

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();
        }
    }
}

дает:

Услуга "Опыт применения" в настоящее время выполняется.

Служба обслуживания фильтров Andrea ST в настоящее время выполняется.

Служба шлюза уровня приложения служба в настоящее время остановлена.

Служба информации о приложении в настоящее время выполняется.

и т.д...

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

Ответ 3

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

Ответ 4

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

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