Останов службы Windows из приложения asp.net в Windows 7

Как я могу остановить службу Windows из приложения asp.net на компьютере с Windows 7 таким образом:

var sc = new ServiceController("TapiSrv", "localhost");
sc.Stop();

Когда я звоню sc.Stop(), я получаю следующее Cannot open TapiSrv service on computer 'localhost'.

Обновление: вместо этого я попытался использовать сетевой IP-адрес и получил то же самое. Я обнаружил, что всегда могу начать, но не могу остановиться. Я пробовал олицетворение (WindowsImpersonationContext), но это не имело значения.


person johnny    schedule 20.09.2011    source источник


Ответы (2)


Вы можете использовать класс ServiceController() в приложении ASP.NET, но вы должны олицетворять пользователя, имеющего права на управление службами.

        ServiceController service = new ServiceController("PACSService");

        if (service != null)
        {
            try
            {
                switch(instruction)
                {
                    case SerwerRequest.Start:
                        if (service.Status == ServiceControllerStatus.Stopped)
                        {
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10));
                        }
                        break;
                    case SerwerRequest.Stop:
                        if (service.Status == ServiceControllerStatus.Running)
                        {
                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
                        }
                        break;
                    case SerwerRequest.Restart:
                        if (service.Status == ServiceControllerStatus.Running)
                        {
                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(8));
                        }
                        if (service.Status == ServiceControllerStatus.Stopped)
                        {
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(8));
                        }
                        break;
                    default:
                        break;
                }
                return Json(new { status = 1 }, JsonRequestBehavior.AllowGet);
            }
            catch (System.ServiceProcess.TimeoutException exc)
            {
                return Json(new { status = -4 }, JsonRequestBehavior.AllowGet);
            }
            catch
            {
                return Json(new { status = -99 }, JsonRequestBehavior.AllowGet);
            }
        }
        else
        {
            return Json(new { status = -6 }, JsonRequestBehavior.AllowGet);
        }
person Sebastian Xawery Wiśniowiecki    schedule 20.04.2015

Попробуйте заменить localhost именем текущей машины.

Или вы можете сделать Process.Start("net stop TapiSrv");

person Davide Piras    schedule 20.09.2011