c#输出一个平行四边形_在服务中默默地执行C#业务代码

45c079e696d74accca35decdfee36314.png

拉出来遛遛

上期回顾

在上一篇文章《用C#写一个在后台偷偷运行的服务》中,我们用C#完成了一个基础的Windows服务的编写。

63c56855e6a14a51e42e419f5d8497d2.png

代码结构图

加入业务代码

现在我们来讲解如何在服务中运行我们的业务代码:

94342cfaabefa2718c7f7cd93aa53df7.png

查看代码(F7)

我们查看MyService1.cs的代码:

7b49008361223bdbbfe93948c602a0be.png

OnStart

其中的OnStart函数,就是执行我们的代码的地方。在这里我们可以实现自己的业务逻辑,比如数据监测,网络通信,后台服务等等。因为OnStart函数,会在用户启动服务的时候执行。

今天我们写一个简单的示例:

8ea8dfe1b07438ea7b147ea821a7bf94.png

模仿业务代码

我们模拟一个循环,里面通过Sleep来模仿实际的业务代码,同时我们输出一个带计数的日志,来监控服务的运行情况。

其中的Logger是我简单写的一个日志模块,Logger会在服务的exe所在目录,创建指定文件名的日志文件,调用Logger.Log函数,即可完成日志的输出。

dc4950ac7239d764dacfde83cec05108.png

简单的日志

运行服务

现在我们编译一下服务,运行看看效果:

ede376d3d6120054a28782e4dd902138.png

启动服务

打开日志文件:

4fefa7dc9f5bd1ce6e951c4b3978d243.png

日志

运行结果如下:

24a0b3e90a982539117107b323ba786e.png

日志结果

可以看到我们的服务以及正常运行了。日志正常输出。

服务停止业务代码

78dfe74a9deae42538a3bfbe2a7a23e3.png

OnStop

我们看到,在MyService1.cs中,还有一个自动生成的函数OnStop。这个函数就是处理服务停止的时候的业务代码。

通常我们的服务停止的时候,需要释放服务中的资源,如:

  • 关闭文件
  • 刷入缓存
  • 关闭数据库连接
  • 关闭网络连接
  • 。。。。。。

这些资源释放的操作,就是在OnStop函数中执行的。而且OnStop函数,会在用户停止服务的时候调用。

c546c9eb1c42b060993082b2cb92899e.png

收尾

我们就简单的实现停止服务逻辑:

  • 标记服务结束
  • 等待线程退出
  • 释放日志资源

然后我们停止服务,编译程序,再重新运行服务。这时服务和之前没有差别。

现在我们再次停止服务,然后对比两次服务结束之后的日志输出的差异:

3347448b41424127082ca19b738801c1.png

停止服务

4dd865df9781d82bc9899df88dafd16e.png

结果对比

我们不难看出,在我们的OnStop函数中,服务还写了最后一条日志。

如果我们不在OnStop中执行相关的收尾工作,那么我们将丢失最后一次服务执行的数据。如果数据非常重要,这将导致数据丢失,进而造成严重后果。

踩坑记录

外老师在这时遇到一个问题:服务安装失败

4047e69c64f944ca4720e5b34eed01e6.png

安装失败

最后发现需要以管理员运行VS 2019才能执行服务安装!因为安装服务,需要管理员权限。

33a4389d032a11e966c9c15146be9e5f.png

以管理员运行

下期预告

如何调试服务?

服务如何支持暂停/恢复?

以及其他服务的高级开发秘籍!

敬请期待。。。

下一篇文章《一步一步地调试C#服务》,欢迎检阅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值