在一个vs2019中如何在对话框中实现自己的cpp和.h文件_在服务中默默地执行C#业务代码...

本文介绍了如何在C# Windows服务中加入自己的C++业务代码,并在服务启动和停止时执行相应操作。通过示例展示了如何在OnStart中模拟业务逻辑并记录日志,以及在OnStop中进行资源释放。同时,强调了以管理员权限运行VS 2019安装服务的重要性。
摘要由CSDN通过智能技术生成
0a8a2b82afee70310a3b19606210f71c.png

拉出来遛遛

上期回顾

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

79433db3479f7daf334a9bbd6de4bea3.png

代码结构图

加入业务代码

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

d453914b1fa6055db098fe448a8a163d.png

查看代码(F7)

我们查看MyService1.cs的代码:

d73cb660f243e58248559b8c1c519fec.png

OnStart

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

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

462274f173ed34b8e29a801fa9ffbc54.png

模仿业务代码

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

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

5195918c049f081694292c3398c6a708.png

简单的日志

运行服务

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

5245ef23e065278e7420ddd342ad4db3.png

启动服务

打开日志文件:

a9302b8829dbc94b8141722a1d1e0c51.png

日志

运行结果如下:

b7718d2b1a1ad600562f6500ff60b2ec.png

日志结果

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

服务停止业务代码

b44e528f9114743a78d795b3b0750d10.png

OnStop

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

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

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

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

f5ec3bf72b66ac322414e59eb448afc3.png

收尾

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

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

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

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

56992ac00ece32bc9207f1297fc560d2.png

停止服务

20f437405a64ef300f4418ac63159568.png

结果对比

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

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

踩坑记录

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

9cf04318c5b17030ed222819f1290285.png

安装失败

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

38c7b89fb212f21ac73b9189b14fc3ae.png

以管理员运行

下期预告

如何调试服务?

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

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

敬请期待。。。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值