【问题标题】:Stopping windows service from asp.net application on Windows 7 [duplicate]从 Windows 7 上的 asp.net 应用程序停止 Windows 服务 [重复]
【发布时间】:2011-11-21 08:34:18
【问题描述】:

如何以这种方式从 Windows 7 机器上的 asp.net 应用程序停止 Windows 服务:

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

当我打电话给sc.Stop() 时,我得到以下Cannot open TapiSrv service on computer 'localhost'.

更新: 我尝试改用网络IP,但得到了相同的结果。我发现我总是可以开始但不能停止。我尝试过模拟(WindowsImpersonationContext),但没关系。

【问题讨论】:

    标签: asp.net windows-services


    【解决方案1】:

    尝试用当前机器名替换localhost

    或者你可以Process.Start("net stop TapiSrv");

    【讨论】:

      【解决方案2】:

      您可以在 ASP.NET 应用程序中使用ServiceController() 类,但您必须模拟一个有权管理服务的用户。

              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);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多