В C#, как я запрашиваю список рабочих сервисов на Windows Server?

Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.

console.log((1, 2)); // Returns 2 in console
console.log((a = b = 3, c = 4)); // Returns 4 in console

Итак, посмотрим пример:

var a = {
  foo: function() {
    console.log(this === window);
  }
};

a.foo(); // Returns 'false' in console
(0, a.foo)(); // Returns 'true' in console

Теперь в foo метод this равен a (потому что foo присоединен к a). Поэтому, если вы вызываете a.foo(), он будет записывать false в консоли.

Но если вы звонили (0, a.foo)(). Выражение (0, a.foo) будет оценивать каждый из его операндов (слева направо) и возвращает значение последнего операнда. Другими словами, (0, a.foo) эквивалентен

function() {
  console.log(this === window);
}

. Поскольку эта функция больше не привязана ни к чему, ее this является глобальным объектом window. Вот почему он записывает true в консоли при вызове (0, a.foo)().

25
задан kkelly18 9 May 2009 в 02:22
поделиться

4 ответа

Чтобы использовать метод 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));
    }
}
24
ответ дан 28 November 2019 в 18:05
поделиться

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

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;
   }
 }
 }
3
ответ дан Mehedi hasan 15 October 2019 в 15:13
поделиться

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

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

40
ответ дан 28 November 2019 в 18:05
поделиться

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

5
ответ дан 28 November 2019 в 18:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: