C# Windows Service入门

C# Windows Service入门 https://www.cnblogs.com/FreeLoopPowter/p/15598294.html

  Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。 这些功能使服务非常适合在服务器上使用,或者需要长时间运行的功能(不会影响在同一台计算机上工作的其他用户)的情况。感觉作用跟Windows任务计划差不多,但是任务计划可以灵活地设置运行可执行应用程序的时间,可以是带用户界面的程序,Window服务更像隐形英雄,默默在后台运行。

本次演示使用环境:VS2019、windows 10专业版

1、创建Windows Service项目

2、默认创建的项目文件目录如下:

 【可选】将Service1重命名为MyService

a)向MyService设计器中添加 EventLog控件

默认创建的service1.cs代码中包括构造函数、重载的OnStart和重载的OnStop函数,OnStart和OnStop函数分别在启动和停止服务时会触发。

直接粘贴上写好的代码,这里没啥功能就是通过事件日志和往一个文本文件中不断写入一句话来显示服务一直在运行。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

using System;

using System.Diagnostics;

using System.IO;

using System.ServiceProcess;

using System.Text;

using System.Timers;

namespace FirstWindowsServiceApp

{

    public partial class MyService : ServiceBase

    {

        public MyService()

        {

            InitializeComponent();

            if (!System.Diagnostics.EventLog.SourceExists("MyEventSource"))

            {

                System.Diagnostics.EventLog.CreateEventSource("MyEventSource", "MyEventLog");

            }

            //事件查看器详情 Provider Name属性

            eventLog1.Source = "MyEventSource";

            //将在事件查看器中看到的服务日志

            eventLog1.Log = "MyEventLog";

        }

        protected override void OnStart(string[] args)

        {

            eventLog1.WriteEntry("Personal Windows Service In OnStart");

            //需要添加 using System.Timers; 注意命令空间

            //利用Timer实现间隔固定时间触发一次文本文件写入

            Timer timer = new Timer

            {

                Interval = 30000, //30秒

                Enabled = true

            };

            timer.Elapsed += Timer_Elapsed;

            timer.Start();

        }

        protected override void OnStop()

        {

            eventLog1.WriteEntry("Personal Windows Service In OnStop");

        }

        private void Timer_Elapsed(object sender, ElapsedEventArgs e)

        {

            //分别在事件查看器 EventData 级别 事件ID中可以看到

            eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);

            WriteToDisk();

        }

        private void WriteToDisk()

        {

            string path = @"D:\Record.txt";

            using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))

            {

                string strContent = "MyWindwosServices:    Service Info  " + DateTime.Now.ToString() + "\n";

                //将字符串转成byte数组

                byte[] byteFile = Encoding.UTF8.GetBytes(strContent);

                fs.Position = fs.Length;

                //参数:要写入到文件的数据数组,从数组的第几个开始写,一共写多少个字节

                fs.Write(byteFile, 0, byteFile.Length);

            }

        }

        private int eventId = 0;

    }

}

 2、下一步就是

Account代表认证方式,这里选LocalSystem,默认不设置的话,在注册服务时会要求输入用户名和密码。

 3、注册服务

 卸载对应的是 installutil /u "可执行应用程序完整路径"

在服务里就可以看到定义的服务里,手工启动后就可以,服务就开始运行了,就可以通过事件查看器和

该文章主要用于入门,写得比较简单,主要以截图为主。如果实践过程中有任何疑问,欢迎交流。

该内容是从本人博客园随笔搬运而来,CSDN太多的商业化,自定义话栏目都需要认证博客专家,的确诸多不变,欢迎前往博客园查看本人其他随笔,都以入门为主。深入还是得在项目中实际用起来,不闻不若闻之,闻之不若见之。更多的了解才会有更多的选择,技术大佬知识面肯定比像我这类菜鸟宽,菜鸟努力也会有成为大佬的一天,你说对吧?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值