vs2019 创建Windows Service

20 篇文章 0 订阅
3 篇文章 0 订阅
  •  如果讨厌用windows窗体创建,还要避免调试麻烦可以用Topshelf开源服务框架详见:Topshelf:

https://blog.csdn.net/tx1721110240/article/details/118722296

  •  首先创建一个Windows服务程序

  •  编译器生成项目如下:

  •  双击右侧Service1.cs,然后在左侧右键单机添加安装程序

 

 如图,我们看见了2个控件

右键serviceInstaller1单击属性

 将ServiceName修改为TestService,这将是我们服务中显示的名称。

然后右键serviceProcessInstaller1单击属性,设置Account这代表着用那种用户启动这个服务

  • 代码编写

Program.cs中Main方法是整个程序的起点,并且可以调用多个服务程序

 在服务代码中,OnStart和OnStop只会执行一次,分别在开始和停止的时候。除此之外还有OnContinue,OnPause等等,详细请在ServiceBase处按F12,从元数据。

namespace TestWindowsService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                this.WriteLog("服务启动");
                this.ToDoSomeThings();
            }
            catch (Exception ex)
            {
                this.WriteLog(ex.Message);
                ServiceController serviceController = new ServiceController();
                if (serviceController.CanStop)
                {
                    serviceController.Stop();
                }
            }
            
        }

        protected override void OnStop()
        {
            try
            {
                this.WriteLog("服务结束");
            }
            catch (Exception ex)
            {
                this.WriteLog(ex.Message);
                ServiceController serviceController = new ServiceController();
                if (serviceController.CanStop)
                {
                    serviceController.Stop();
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        private void ToDoSomeThings() 
        {
            DateTime dateTime = DateTime.Now;
            if (dateTime.Hour == 14 && dateTime.Minute == 30)
            {
                int a = 0;
                for (int i = 0; i < 10000; i++)
                {
                    a += i;
                }
                this.WriteLog(a.ToString());
            }
            
        }
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="LogContent"></param>
        private void WriteLog(string LogContent) 
        {
            string FilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\Log.txt";
            FileStream fileStream = null;
            if (File.Exists(FilePath))
            {
                fileStream = new FileStream(FilePath, FileMode.Append);
            }
            else
            {
                fileStream = new FileStream(FilePath, FileMode.OpenOrCreate);
            }
            StreamWriter streamWriter = new StreamWriter(fileStream);
            streamWriter.WriteLine(DateTime.Now + System.Environment.NewLine + LogContent);
            
            streamWriter.Close();
            fileStream.Close();
            GC.Collect();
        }
    }
}
  •  保存并生成后,将服务安装

 详细安装方式见上一篇

https://blog.csdn.net/tx1721110240/article/details/102649542

  • 调试方式

注:因为服务未启动时无法产生进程,所以一般调试都会在项目中再创建一个控制台或窗体,调用需要调试的方法达到调试的目的,而不会使用这种调试方式。

首先启动服务

在vs中调试-》附加到进程

 选择和项目名称一样的进程名,点击附加后就可以正常调试了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值