小言_互联网的博客

C# 创建一个简单的Windows服务

398人阅读  评论(0)

有时候需要在服务器上长时间运行一些小程序,除了WinForm外,还可以运行Windows服务。相比WinForm,Windows服务更稳定。

Windows服务介绍

Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。本文就向大家介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。

创建Windows服务

1、以VS2019为例:在解决方案上右键——>添加——>新建项目

2、创建完成后,在出现的设计视图上,点击右键——>添加安装程序

3、更改serviceProcessInstaller1的Account为LocalSystem

4、更改serviceInstaller1的Descrption和ServiceName

5、右键Service1.cs查看代码,开始编写代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace WindowsServiceDemo
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        //开启服务
        protected override void OnStart(string[] args)
        {
            //服务开启执行代码
            Task.Run(() => Service());
        }
        //关闭服务
        protected override void OnStop()
        {
            WriteTxt("关闭服务");
        }

        private void Service() 
        {
            WriteTxt("开启服务");
            int nums = 0;//记录次数
            while (true)
            {
                nums++;
                WriteTxt("第 " + nums + " 次循环");
                Thread.Sleep(1000 * 3);//等待三秒
            }
        }

        //记录日志
        public void WriteTxt(string content)
        {
            try
            {
                string exeFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                string Directory = exeFolder + "\\logs";
                string filepath = Directory + "\\日志(" + DateTime.Now.ToString("yyyy-MM-dd") + ").txt";
                if (!System.IO.Directory.Exists(Directory))
                    System.IO.Directory.CreateDirectory(Directory);

                StreamWriter sw = new StreamWriter(filepath, true, Encoding.UTF8);
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + content);
                sw.Close();

            }
            catch { }
        }
    }
}

6、编译,生成,打开项目所在的Debug文件夹,新建两个文本文件install.txt,Uninstall.txt


(1)在install.txt中写入如下脚本命令:

pushd %~dp0
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start AMyService
sc config AMyService start= auto
Pause


(2)在Uninstall.txt中写入如下脚本命令:

pushd %~dp0
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause

(3)将两个txt文件的后缀改成bat

7、右键,以管理员运行instail.bat,安装并启动服务

logs中会生成日志

服务管理器中会看到刚刚启动的服务

8、右键,以管理员身份运行Uninstail.bat,停止并卸载服务

以上便是创建一个简单的Windows服务的过程!

欢迎访问作者个人技术博客:www.blackvon.top
作者的微信公众号和小程序


转载:https://blog.csdn.net/weixin_42281203/article/details/106131205
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场