Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
blockquote>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)()
.
Чтобы использовать метод 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));
}
}
Это проверит имя службы вашей системы и имя нужного вам сервиса, которое вы можете указать в параметре
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;
}
}
}
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...
] Конечно, я использовал версию без параметров для получения служб на моем компьютере.
Для этого можно использовать wmi (System.Management). Вы также можете использовать ServiceController.GetServices ()
.