如何在网页启动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,或者选择自定义账户,新建一个有权限的账号也可以。

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

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

 
 
分类: C# ASP.NET
标签: windows服务

网页启动Windows服务的更多相关文章

  1. 如何在网页启动Windows服务

    由于公司有许多windows服务进行业务的处理,所以对服务的维护也是一个比较头痛的问题,因为自己也不知道服务什么时候自动停了,而且更主要的原因是服务都是由运维部门在维护管理,开发这边没有直接操作服务的 ...

  2. c#启动windows服务问题总结

    程序以管理员权限运行的原因 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下 ...

  3. 启动windows服务的bat文件编写格式

    1.bat文件需要和bin文件内容放在一起 启动服务的bat文件如下: sc create 邮件服务 binPath= "%~dp0可执行文件名称.exe" start= auto ...

  4. 启动Windows服务

    实现效果: 知识运用: ServiceController类的ServiceName Status属性 public string ServiceName {get; set;} //对此Servic ...

  5. 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它

    无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer.Windows服务器管理工具或NET START命令启动它 1. ...

  6. 注册、启动、停止windows服务

    找到本机InstallUtil.exe命令 命令行下注册服务InstallUtil.exe D:\XXXXService.exe 启动服务 net start XXXXService 停止服务net ...

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

    在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Envi ...

  8. SpringBoot注册Windows服务和启动报错的原因

    SpringBoot注册Windows服务和启动报错的原因 Windows系统启动Java程序会弹出黑窗口.黑窗口有几点不好.首先它不美观:其次容易误点导致程序关闭:但最让我匪夷所思的是:将鼠标光标选 ...

  9. Windows Service 学习系列(二):C# windows服务:安装、卸载、启动和停止Windows Service几种方式

    一.通过InstallUtil.exe安装.卸载.启动.停止Windows Service 方法一 1.以管理员身份运行cmd 2.安装windows服务 切换cd C:\Windows\Micros ...

随机推荐

  1. Gitserver几家互联网代理安装方法未能解决。

    1.gem安装下面的错误 root@ubuntu:/home/git/gitlab# sudo gem install bundler --no-ri --no-rdoc ERROR:  Could ...

  2. JS动态获取浏览器宽度和高度

    $(window).resize(function() { var width = $(this).width(); var height = $(this).height(); });

  3. error C3130: 内部编译器错误: 未能将插入的代码块写入PDB

    近期编译cocos2d-x的test突然出现这个错误,又一次编译也无法解决. 一般出现这个错误是两个原因:一个是磁盘空间不足,还有一个是项目太大导致pdb文件太大,无法继续写入. 原本cocos2d- ...

  4. 在LINQ中实现多条件联合主键LEFT JOIN

    我昨天遇到一个LINQ下使用多条件比对产生LEFT JOIN的问题,经过深入研究,终于解决了,也让我学到了新的东西,特地拿来分享. 实例:有一张库存异常变更视图KCYD,仓库ID[Ckid]和物品ID ...

  5. httppost body的实现, 和body是gb2312等编码的实现

    使用的是http4.X 版本,里面推荐使用的post是key value的形式 List<NameValuePair> formparams = new ArrayList<Name ...

  6. mysql_navicat-permium 在Mac下破解方法

    首先下载符合当前系统支持的navicat-permium版本,我自己下载的是11.0.16 然后我们开始破解旅程,先要安装上navicat-permium,记住千万不要打开(如果你打开了不好意思,卸了 ...

  7. 【Swift初见】Swift词典

    顾名思义.当我们仰望的时候,我们将基于索引查找我们需要找到的资源.在swift这同样适用,每个对象包括字典key和value.我们key为了找到当前这个key相应的value.与数组不同的是,字典项字 ...

  8. 从头开始学JavaScript (四)——操作符

    原文:从头开始学JavaScript (四)--操作符 一.一元操作符 1.自增自减操作符:分为前置型和后置型: 前置型:++a;--a; 后置型:a++;a--; 例: <script typ ...

  9. Cgroup maintainer丽泽范:解剖Linux核心容器技术

    摘要:Cgroup和namespace等内核特性如何出现,在社区处于如何的开发状况?Docker如火如荼.内核社区是否会因此加紧完好容器技术的隔离性安全性?华为Linux内核高级project师李泽帆 ...

  10. c# 替换非法字符

    保存文件的时候,文件名不允许非法字符. public string ReplaceSpecialCharacter(string str)        {            List<ch ...