概念:(Copyed From 百科)
Windows服务是指Windows NT操作系统中的一种运行在后台的计算机程序。它在概念上类似于Unix守护进程。Windows服务必须匹配服务控制管理器(负责管理Windows服务的组件)的接口规则和协议。
Windows服务可以配置为在操作系统启动时运行,并且在Windows运行期间持续在后台运行。服务也可以手动或基于某个事件而启动。Windows NT操作系统包含众多服务,分别运行在三种用户帐户环境中:系统、网络服务和本地服务。这些Windows组件通常采用Windows服务托管进程。因为Windows服务运行在其自身的专用用户帐户中,它们可以在用户未登录时活动。
在Windows Vista之前,安装为“交互服务”的服务可以与Windows桌面交互和显示图形用户界面。但在Windows Vista中,交互服务已被弃用,并且可能无法正常运行。
要求:
.netFramework必须在4.5.2版本以上(这是Topshelf的要求,不是所有Windows Service的要求)。
编者使用VS2019进行演示:
实现步骤:
1.新建一个Windows项目,最好直接建立控制台程序(.netFramework 4.5.2),项目命名为:DeamonLogService。
2.引入管理NUGet程序包:
方法:引用->管理NUGet程序包
浏览->搜索:Topshelf->选择对应版本号,点击安装。
我使用的版本号为:4.2.1。如果项目的版本是.netframework 4.5.2版本一下的,可以使用Topshelf的更低版本(ps具体实验我没做过,读者自行完善)。
3.新建DeamonLog类,该类通过定时器(你也可以自己使用其他方式实现),来实现服务开启之后,进行进程日志存储。其实现如下:
using System;
using System.IO;
using System.Timers;
namespace DeamonLogService
{
/// <summary>
/// 进程日志
/// </summary>
public class DeamonLog
{
/// <summary>
/// 定时器
/// </summary>
private readonly Timer timer;
/// <summary>
/// 建立一个日志服务
/// </summary>
public DeamonLog()
{
// 初始化定时器(1s执行一次,重复)
timer = new Timer(1000) { AutoReset = true, };
// 绑定定时器处理事件
timer.Elapsed += Timer_Elapsed;
}
/// <summary>
/// 定时器处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
string[] lines = new string[] { DateTime.Now.ToString() };
File.AppendAllLines(@"C:\Deamon\DeamonLog.txt", lines);
// TODO:在我们的服务中进行处理的事情。
}
/// <summary>
/// 开启日志服务
/// </summary>
public void Start()
{
timer.Start();
}
/// <summary>
/// 停止日志服务
/// </summary>
public void Stop()
{
timer.Stop();
}
}
}
4.在主函数Main中,初始化和绑定服务到主机的服务进程中;设置服务基本信息和处理方式;获取服务结束时的退出代码(exitCode),当服务结束服务时,退出进程。
using System;
using Topshelf;
namespace DeamonLogService
{
class Program
{
static void Main(string[] args)
{
// 通过Topshelf获取程序退出的代码
var exitCode = HostFactory.Run(x =>
{
// 初始化和绑定服务
x.Service<DeamonLog>(s =>
{
s.ConstructUsing(log => new DeamonLog());
s.WhenStarted(log => log.Start());
s.WhenStopped(log => log.Stop());
});
// 设置服务为本地系统
x.RunAsLocalSystem();
// 设置服务的名称和描述
x.SetServiceName("DeamonLogService");
x.SetDisplayName("Deamon Log Service");
x.SetDescription("This is sample deamon log service used by Mef Deamon");
});
// 将退出代码转换成Int值,并赋值给Environment.ExitCode,当服务关闭时,退出程序
int exitCodeValue = (int)Convert.ChangeType(exitCode, exitCode.GetTypeCode());
Environment.ExitCode = exitCodeValue;
}
}
}
至此,编码结束,接下来进行服务的开启和使用。在此之前,我们首先测试下,我们程序是否正常运行。
5.测试功能
按F5运行程序:
控制台会出现以下消息,说明成功了:
然后我们查看以下日志文件,我设置的路径为:C:\Deamon\DeamonLog.txt。(ps:如果路径中不存在某个文件夹,存储不成功)。
6.服务安装与卸载
通过命令行进行安装。
(1)把我们的可执行文件放到我们能访问的文件内(演示中文件路径为:C:\Deamon\DeamonLog)。
(2)打开命令行:cmd
(3)启用服务:
a.进入文件夹:cd C:\Deamon\DeamonLog
b.初始化服务:DeamonLogService.exe install start
打开Windows服务进行检查。
我们可以通过右键进行开启或关闭服务。
(4)卸载服务:
1.进入文件夹:cd C:\Deamon\DeamonLog
2.卸载服务:DeamonLogService.exe uninstall
卸载之后,DeamonLogSeevice就不在了。
源码地址:https://download.csdn.net/download/youyomei/11383719
Over
每次记录一小步...点点滴滴人生路..