zoukankan      html  css  js  c++  java
  • c#创建、安装、卸载、调试windows服务的简单事例

    最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用c#创建、安装、卸载、调试windows服务的步骤。

    一、创建windows服务

    1、用VS创建windows服务,结果如下:

    2、删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下:

    此时,解决方案的目录结构如下:

    3、双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下:

    4、右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService,如下:

    5、右键”ServiceInstaller1“,选择属性,设置属性

      a)Description 服务描述,直接显示到Windows服务列表中的描述;

      b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;

      c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识.

    如下:

    6、创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:

    %SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe WindowsServiceDemo.exe
    Net Start MyService
    sc config MyService start= auto
    pause

    记事本另存为时设置编码为ANSI,如下图:

    7、同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:

    %SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe /u WindowsServiceDemo.exe
    pause

    此时解决方案的目录结构如下:

    二、写服务代码

    右键”MyService.cs“,选择查看代码,如下:

    复制代码
    namespace WindowsServiceDemo
    {
        partial class MyService : ServiceBase
        {
            public MyService()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                // TODO: 在此处添加代码以启动服务。
            }
    
            protected override void OnStop()
            {
                // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
            }
        }
    }
    复制代码

    下面实现自己的简单功能,代码如下:

    复制代码
    using System;
    using System.Diagnostics;
    using System.IO;
    using System.ServiceProcess;
    using System.Timers;
    
    namespace WindowsServiceDemo
    {
        partial class MyService : ServiceBase
        {
            private Timer time = new Timer();
            public MyService()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                WriteLog("服务启动,时间:"+DateTime.Now.ToString("HH:mm:ss") + "
    ");
    
                time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent);
                time.Interval = 2 * 1000;//时间间隔为2秒钟
                time.Start();
            }
    
            protected override void OnStop()
            {
                WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
    ");
            }
    
            private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
            {
                time.Enabled = false;
    
                string result = string.Empty;
                string startTime = DateTime.Now.ToString("HH:mm:ss");
                try
                {
                    //.........
    
                    result = "执行成功,时间为:"+ startTime;
                }
                catch (Exception exp)
                {
                    result = "失败,原因:" + exp.Message;
                }
                finally
                {
                    WriteLog(result);
    
                    time.Enabled = true;
                }
            }
    
            /// <summary>
            /// 日志记录
            /// </summary>
            /// <param name="logInfo"></param>
            public void WriteLog(string logInfo)
            {
                try
                {
                    string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\Logs";
                    if (!Directory.Exists(logDirectory))
                    {
                        Directory.CreateDirectory(logDirectory);
                    }
                    string filePath = logDirectory + "\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                    File.AppendAllText(filePath, logInfo);
                }
                catch
                {
                }
            }
        }
    }
    复制代码

    具体功能是2秒钟执行一次,并记录日志。

    三、安装windows服务

    重新生成整个解决方案,成功后,从项目所在文件夹赋值bin文件到某个自定义的文件夹,并将Install.bat和Uninstall.bat复制到bin下的Debug文件夹中。

    以管理员身份运行Install.bat安装服务,成功结果如下图:

    这是右键“我的电脑”,选择“管理”,选择“服务”,就可以看到服务已安装,如下图:

    同时,Debug文件夹里有了Logs文件,Logs文件夹里有txt文档,内容如下:

    可以看到没2秒钟执行一次。

    四、卸载windows服务

    卸载服务,同样以管理员身份运行Uninstall.bat即可。

    五、调试windows服务

    打断点,在工具栏选“调试”下的“附加到进程”,附加自己的服务即可调试。

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/zxtceq/p/6963521.html
Copyright © 2011-2022 走看看