Спиране на услугата 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