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服务

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

  • 相关阅读:
    开发一个App的成本是多少?
    自定义Drawable
    数据库服务软件类型和配置redis
    分库分表
    创建视图
    部署MYSQL高可用集群
    读写分离《二》
    读写分离和多实例
    部署mysql主从同步
    备份和恢复
  • 原文地址:https://www.cnblogs.com/zxtceq/p/6963521.html
Copyright © 2011-2022 走看看