Завершение процесса и остановка службы - это две разные вещи.Служба может порождать другие процессы, которые останутся в прошлом.Кроме того, вы эффективно затягиваете процесс.Не дается никакого времени, чтобы аккуратно остановиться, записать все на диск и т. Д.
Вместо этого вам следует использовать объект WMI Win32_Service
, чтобы найти свой сервис.Это метод StartService
и StopService
, который позволит вам останавливать и запускать его по мере необходимости.
Имейте в виду, этот объект WMI содержит служб , а не процессовпоэтому вам придется настроить свой код, чтобы он останавливался по имени службы, а не по имени процесса.Примерно так:
ConnectionOptions options = new ConnectionOptions();
options.Username = userName;
options.Password = password;
ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", serverFullName), options);
scope.Connect();
ObjectQuery query = new ObjectQuery(string.Format(@"SELECT * FROM Win32_Service WHERE Name='{0}'",serviceToStop));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
m.InvokeMethod("StopService", null);
}
Затем вы можете использовать InvokeMethod
в StartService.