zoukankan      html  css  js  c++  java
  • 如何在网页启动Windows服务

    由于公司有许多windows服务进行业务的处理,所以对服务的维护也是一个比较头痛的问题,因为自己也不知道服务什么时候自动停了,而且更主要的原因是服务都是由运维部门在维护管理,开发这边没有直接操作服务的权限,所以利用网页监控服务就很重要了(在服务中也可以增加邮件提醒,比如服务报错或者断掉)。

    s3

    如何获取电脑上的所有服务:

    使用.Net框架类库中自带的组件ServiceController可以实现对 Windows服务的操作。

    1、首先要在你的项目添加引用System.ServiceProcess命名空间;

    2、创建ServiceController的实例;

    //获取当前计算机上的所有非设备驱动程序服务
    ServiceController[] myServices = ServiceController.GetServices();

    GetServices方法有一个重载,默认获取本机的服务,如果想获取某台机器上的服务,则要指定机器名,前提是要有权限获取。

    由于是用网页获取电脑上的所有服务,我就直接贴网页后台代码了,如下:

    protected void Page_Load(object sender, EventArgs e)
            {
                ServiceController[] myServices = ServiceController.GetServices();
    
                list = new List<ServiceModel>();
                foreach (var item in myServices)
                {
                    if (item.ServiceType == ServiceType.Win32OwnProcess)
                    {
                        ServiceModel model = new ServiceModel();
                        model.ServiceName = item.ServiceName;
                        model.DisplayName = item.DisplayName;
                        if (item.Status == ServiceControllerStatus.Running)
                            model.IsRunning = true;
                        else
                            model.IsRunning = false;
                        list.Add(model);
                    }
                }
            }

    其中ServiceModel是我新建的一个实体类,用来保存相关服务的信息。前提页面部分截图如下:

    s1

    根据服务的当前状态,可以对服务进行:停止、启动、重启等操作。由于我是根据点击的操作,传到一般处理程序进行处理的,所以直接上代码,很简单:

    public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
    
                //服务名
                string serviceName = context.Request.QueryString["serviceName"];
                //操作类型【重启、停止、重启】
                string type = context.Request.QueryString["type"];
    
                try
                {
                    switch (type)
                    {
                        case "start":
                            StartService(serviceName);
                            break;
                        case "stop":
                            StopService(serviceName);
                            break;
                        case "reset":
                            ResetService(serviceName);
                            break;
                        default:
                            ResetService(serviceName);
                            break;
                    }
    
                    context.Response.Write("ok");
                }
                catch (Exception ex)
                {
                    context.Response.Write(ex.Message);
                }
    
            }
    
            /// <summary>
            /// 启动服务
            /// </summary>
            /// <param name="serviceName">服务名</param>
            private void StartService(string serviceName)
            {
                ServiceController service = new ServiceController(serviceName);
                if (service.Status == ServiceControllerStatus.Stopped)
                {
                    service.Start();
                    service.WaitForStatus(ServiceControllerStatus.Running);
                    service.Close();
                }
            }
    
            /// <summary>
            /// 停止服务
            /// </summary>
            /// <param name="serviceName">服务名</param>
            private void StopService(string serviceName)
            {
                ServiceController service = new ServiceController(serviceName);
                if (service.Status == ServiceControllerStatus.Running)
                {
                    service.Stop();
                    service.WaitForStatus(ServiceControllerStatus.Stopped);
                    service.Close();
                }
            }
    
            /// <summary>
            /// 重启服务
            /// </summary>
            /// <param name="serviceName">服务名</param>
            private void ResetService(string serviceName)
            {
                ServiceController service = new ServiceController(serviceName);
                if (service.Status == ServiceControllerStatus.Running || service.Status == ServiceControllerStatus.Stopped)
                {
                    service.Stop();
                    service.WaitForStatus(ServiceControllerStatus.Stopped);
                    service.Start();
                    service.WaitForStatus(ServiceControllerStatus.Running);
                    service.Close();
                }
            }

    代码很简单,一看简单明了,呵呵…

    开发注意事项:

    1、如果用VS调试程序对服务进行停止、启动等操作的时候,报

    s2

    解决办法:关闭VS,用管理员身份运行程序即可解决问题

    2、将网页部署到IIS进行访问的时候,可能提示没权限操作等原因:

    首先还是介绍下IIS的安装吧,估计大家对这个都没问题了

    控制面板--->程序和功能--->启用或关闭Windows功能--->Internet信息服务,如下图:

    s4

    由于我用的是Win8,最开始我只勾选了一级目录,就点击安装了,结果运行IIS网站的时候,总是提示403错误,后来才发现是IIS安装不全的问题,请根据上图勾选即可。

    当IIS安装完全之后,网站可以运行了,但是在操作服务的时候提示权限不足原因,请在IIS设置如下:

    s5

    我这里是DefaultAppPool程序池,鼠标右击该程序池-->高级设置,如下如:

    s6

    标识这里选择内置账户为:LocalSystem,或者选择自定义账户,新建一个有权限的账号也可以。

    再次运行网站,对我们的服务进行停止、启动等操作,发现一切正常。

    以上就是今天在做有关网页对服务进行操作说遇到的问题,希望能帮到有同样需求的人。

  • 相关阅读:
    POJ_3104_Drying_(二分,最小化最大值)
    POJ_3273_Monthly_Expense_(二分,最小化最大值)
    POJ_3185_The_Water_Bowls_(反转)
    POJ_2566_Bound_Found_(尺取法+前缀和)
    POJ_3061_Subsequence_(尺取法)
    POJ_3258_River_Hopscotch_[NOIP2015]_(二分,最大化最小值)
    POJ_1064_Cable_master_(二分,假定一个解并判断是否可行)
    POJ_2456_Agressive_cows_(二分,最大化最小值)
    背包九讲之三(多重背包)
    背包九讲之二(完全背包)
  • 原文地址:https://www.cnblogs.com/huige0628/p/3659699.html
Copyright © 2011-2022 走看看