微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# Windows Service入门

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

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

1、创建Windows Service项目

 

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

 

 【可选】将Service1重命名为MyService

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

 

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

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

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 "可执行应用程序完整路径"

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

 

 

 

 

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐