c#创建windows服务入门教程实例

时间:2023-02-24 11:31:31 

用c#中创建一个windows服务非常简单,与windows服务相关的类都在System.ServiceProcess命名空间下。

每个服务都需要继承自ServiceBase类,并重写相应的启动、暂停、停止等方法。

windows服务的相关信息是存放与注册表中的,所以他可以在不需要用户登录的情况下自动运行,在c#中你不需要再直接向注册表中添加信息了,c#提供了服务安装类 ServiceProcessInstaller和ServiceInstaller来实现服务的安装。

首先,用vs创建一个windows服务项目

c#创建windows服务入门教程实例

成功后你可以看到

c#创建windows服务入门教程实例

Program中只包含服务运行的相关信息


/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()//这里是一个数组,意味着我们可以在一个服务进程中创建多个服务实例,只需要在这里加上即可
};
ServiceBase.Run(ServicesToRun);
}

Service1.cs就是我们需要的服务类,与windows服务相关的基本操作大都可以在这里找到,如:Start,Stop,Pause,Continue等,我们要做的就是根据这些操作做不同的处理就可以了。

我们先在服务Start和Stop时分别记录一条信息到D盘


protected override void OnStart(string[] args)
{
File.AppendAllText("d:" + this.GetType().Name + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 服务启动"));
}
protected override void OnStop()
{
File.AppendAllText("d:" + this.GetType().Name + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 服务停止"));
}


一个简单的服务就完成了,下一步添加安装信息

双击项目中的Service.cs转到服务设计界面,在空白处右键选择“添加安装程序”

c#创建windows服务入门教程实例

vs会自动创建一个默认名称为ProjectInstaller.cs的文件并转到相应的设计界面

默认添加两个类 serviceProcessInstaller1和serviceInstaller1,第一个主要用来设置服务所属账户,关系到服务的运行,第二个是服务信息描述,如:服务名、是否自动启动等

右键serviceProcessInstaller1属性,将Account属性选择为LocalSystem

c#创建windows服务入门教程实例

右键serviceInstaller1属性,将StartType属性设为Automatic(自动启动),Description为“我的第一个windows服务”

全部保存后生成,找到生成的程序。

c#创建windows服务入门教程实例

由于windows服务不能通过双击直接运行,所以我们需要借助.net提供的InstallUtil.exe来安装服务。

c#创建windows服务入门教程实例

按回车开始安装,成功后会提示 “提交”阶段已成功完成,如果失败则是“回滚”阶段已成功完成

c#创建windows服务入门教程实例

打开windows服务管理器就能看到我们安装的服务,默认服务安装成功后不会立刻启动,需要我们手动启动

c#创建windows服务入门教程实例

如果不出意外,会显示已启动

c#创建windows服务入门教程实例

到D盘目录下找到Service1.txt,打开会看到我们填入的信息,说明我们做的windows服务已经成功了。

要卸载windows服务可以用InstallUtil.exe /u WindowsService1.exe来卸载或通过系统命令 sc delete 服务名来卸载。

标签:c#,windows服务
0
投稿

猜你喜欢

  • Java使用BIO和NIO进行文件操作对比代码示例

    2023-04-18 16:14:21
  • 详解Android开发数据持久化之文件存储(附源码)

    2022-06-19 20:30:33
  • Android SQLite数据库版本升级的管理实现

    2023-11-09 23:58:44
  • java实现简易的学籍管理系统

    2023-07-21 07:47:26
  • Android自定义scrollview实现回弹效果

    2023-12-15 08:42:47
  • Java Thread之Sleep()使用方法及总结

    2023-11-16 10:38:35
  • java基础的详细了解第九天

    2022-11-11 20:53:50
  • java基础(System.err和System.out)详解

    2022-10-23 23:27:37
  • Java I/O 操作及优化详细介绍

    2022-07-30 14:46:42
  • JAVA提高第八篇 动态代理技术

    2023-07-19 07:13:12
  • JAVA中Collections工具类sort()排序方法

    2021-10-22 04:56:29
  • java身份证合法性校验并提取身份证有效信息

    2023-04-18 17:26:18
  • java实现文件夹解压和压缩

    2022-06-07 03:00:39
  • 用java WebSocket做一个聊天室

    2021-11-30 00:39:55
  • Android线程实现图片轮播

    2021-06-02 17:49:23
  • Android Volley框架使用源码分享

    2023-09-10 09:43:44
  • Java三大特性之多态详解

    2022-11-07 14:24:40
  • java垃圾回收原理之GC算法基础

    2023-10-05 16:10:09
  • 解决SpringBoot跨域的三种方式

    2021-06-20 13:20:08
  • java读写二进制文件的解决方法

    2022-08-03 14:45:55
  • asp之家 软件编程 m.aspxhome.com