系统服务设计---Windows C#版

简述

要在Windows中做一个服务,可以分为两步:

  1. 写一个可以响应服务控制管理器(SCM)的应用程序,SCM是什么呢?服务控制管理器(Service Control Manager,简称SCM)是Windows NT操作系统中的特殊系统进程,其控制Windows服务进程的启动、停止和交互(来自百度)。 可见,SCM是操作系统和系统服务之间沟通的桥梁,他们之间以一种特有的指令传送和执行。使用C#做Windows服务是非常方便的,微软为其提供了非常有力的支持。废话不说了,我们以一个简单的例子看看代码上怎样实现。
  2. 编写服务启动和停止的bat脚本,用以启动和停止服务。

P.S 我这里使用的ide是VS2017,其他版本没有测试过,应该也是大同小异。

编写服务应用程序

1.安装下图,新建Windos服务

2.在新建的项目中自动添加一个名字为Service1.cs的文件,这个文件就是我们要做的服务承载文件。

3.我们到代码里面看一下,构造函数中是常见的初始化函数,这个暂时不用关心。另外两个重载函数OnStart和OnStop,跳到定义位置可以看到,这两个会在服务开始和停止的时候被调用。在这两个函数中添加写入日志的,方便调试。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace TestService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            FileStream fs = new FileStream("c:\\test.txt", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("Test service start");
            sw.Close();
        }

        protected override void OnStop()
        {
            FileStream fs = new FileStream("c:\\test.txt", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("Test service stop");
            sw.Close();
        }
    }
}

4.编译项目,通过没有问题,直接运行却有如下错误提示。不难看出,生成的应用不能以普通的应用直接运行,而必须按照服务特有的方式运行。

服务启动

服务启动有两种不同的方式,一种是使用installUtil.exe安装工具,另一种是使用批处理sc命令,考虑到通用性,我们使用批处理sc命令的方式。

  1. sc命令详解
    1. 安装服务   
      sc create ServiceName 
      binPath= "C:\Users\Administrator\source\repos\TestService\TestService\bin\Debug\TestService.exe"             其中,ServiceName是服务名称,这个名称就是在任务管理器中我们看到的服务名字。binPath是第一部分中生成的应用程序文件。
    2. 配置服务
      sc config ServiceName start=AUTO  这里AUTO为服务的启动方式为自动,除了AUTO之外,还有DEMAND手动和DISABLED禁用
    3. 开启服务
      net start ServiceName 
    4. 关闭服务
      net stop ServiceName 
    5. 删除服务
      sc delete ServiceName 
  2. 创建服务并启动
    echo.服务启动......  
    echo off  
    
    sc create TestService binPath= "C:\Users\Administrator\source\repos\TestService\TestService\bin\Debug\TestService.exe" 
    sc config TestServicestart= AUTO
    net start  TestService
    
    
    echo.启动完毕!
    pause

    将以上代码复制到txt文件中,保存为bat格式,运行之后cmd黑框显示如下:显示服务创建成功,查看任务管理器我们可以看到TestService已经存在,而且c盘根目录下也已经有了test.txt文件。

       

        3.停止服务并删除服务,sc代码如下,运行之后TestService被停止、删除

echo off
net stop "TestService"
sc delete "TestService"
pause

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值