如何在网页启动Windows服务

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

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

使用.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是我新建的一个实体类,用来保存相关服务的信息。前提页面部分截图如下:

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

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调试程序对服务进行停止、启动等操作的时候,报

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

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

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

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

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

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

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

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

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

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

时间: 2024-11-09 00:11:32

如何在网页启动Windows服务的相关文章

C#判断程序是由Windows服务启动还是用户启动

在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Environment.UserInteractive属性,在系统不系统服务的交互模式时,程序运行是正常的,但试过有Win7下,系统允许交互模式,结果在服务启动的时候,跳转到控制台的模式了,服务启动不起来.只能在服务的调用方式下带参数,然后在Main的参数中判断是否为服务方式.这在一般的情况下是可以解决问题

C# 远程服务器 安装、卸载 Windows 服务,读取远程注册表,关闭杀掉远程进程

这里安装windows服务我们用sc命令,这里需要远程服务器IP,服务名称.显示名称.描述以及执行文件,安装后需要验证服务是否安装成功,验证方法可以直接调用ServiceController来查询服务,也可以通过远程注册表来查找服务的执行文件:那么卸载文件我们也就用SC命令了,卸载后需要检测是否卸载成功,修改显示名称和描述也用sc命令.至于停止和启动Windows服务我们可以用sc命令也可以用ServiceController的API,当停止失败的时候我们会强制杀掉远程进程,在卸载windows

第十三篇 一个安装、管理windows服务的桌面程序

在网上看到一个修改程序入口的程序去把windows 服务修改成控制台的程序,然后利用控制台的程序把服务安装和管理,也想起自己原来也写了一个对windows 报务管理的程序,不过是winform的. 界面如下(自己使用,界面比较丑陋): 首先需要添加一个帮助类: 代码如下: class Windows { /// <summary> /// 检查服务存在的存在性 /// </summary> /// <param name=" NameService "&g

WCF服务寄宿IIS与Windows服务

WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行需要一个宿主ServiceHost,我们可以选用控制台应用程序,也可以选择IIS寄宿,还可以选择windows 服务寄宿.相较与控制台程序,IIS,和Windows服务比较稳定.而且大家不会时不时的去重启下IIS下的网站,或者windows服务. 在IIS下寄宿Wcf 我们新建一个类库项目 在项目下

VISUAL STUDIO 2015创建windows服务及调试

1.  新建windows服务项目 2.在Service1.cs上添加业务逻辑代码 3.完成代码以后,记得添加安装程序,否则无法注册为windows服务 Description对应服务里的描述,ServiceName对应服务里的名称 Account选择LocalSystem 4.点击生成解决方案 5.服务程序所在目录中不要有空格,可以将生成的程序拷贝出来 6.将程序注册到window服务中 1)打开命令控制台,windows+R后输入CMD 2)cd C:\Windows\Microsoft.N

[转]玩转Windows服务系列——命令行管理Windows服务

本文转自:http://www.cnblogs.com/hbccdf/p/managewindowsservicewithcmd.html 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令,命令行都是非常方便以及强大的工具. 接下来就看一下如何通过cmd命令管理Windows服务. 管理Windows服务的主要cmd命令 管理Windows服务的命令应该有很多,但是我所了解到的命令主要有两个:sc.net. 说是

webform调用windows服务

准备工作: 0.电脑->管理->本地用户和组->组->Administrator双击->隶属->添加Network service->确定 1.启动windows服务Windows Installer 2.创建winform项目 WindowsFormsApplication1 3.添加windows服务 service1 4.添加代码 protected override void OnStart(string[] args) { if (args != nul

Windows服务创建及安装

我们将研究如何创建一个作为Windows服务的应用程序.内容包含什么是Windows服务,如何创建.安装和调试它们.会用到System.ServiceProcess.ServiceBase命名空间的类.什么是Windows服务? Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合.它没有用户界面,并且也不会产生任何可视输出.任何用户消息都会被 写进Windows事件日志.计算机启动时,服务会自动开始运行.它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环

C# VS 2010创建、安装、调试 windows服务(windows service)

在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案 -------------------------------------------------------------------------------------- 1.创建 windows服务 项目   文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服务" 2.系统已经为我们建立了一个