Topshelf 打包部署Windows服务

1 创建项目(例:控制台程序)

Nuget 引入Topshelf类库

using System;
using System.Threading;
using System.Threading.Tasks;
using Topshelf;

namespace LoginTypeInherit
{
    public class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().ReflectedType);

        static void Main(string[] args)
        {
            // 日志注册
            log4net.Config.XmlConfigurator.Configure();
            try
            {
                var rc = HostFactory.Run(x =>
                {
                    x.Service<Program>(s =>
                    {
                        s.ConstructUsing(name => new Program());
                        s.WhenStarted(p => p.Start());
                        s.WhenStopped(p => p.Stop());
                    });
                    x.RunAsLocalSystem();

                    x.SetServiceName("MyServices");
                    x.SetDisplayName("我的服务描述");
                });

                var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
                Environment.ExitCode = exitCode;
            }
            catch (Exception ex)
            {
                log.Error("服务启动出错", ex);
            }
        }

        /// <summary>
        /// 服务启动
        /// </summary>
        void Start()
        {
            log.Info("服务正在启动");
            Task.Run(() =>
            {
               // 我的服务方法....
            });
            log.Info("服务已经启动");
        }

        /// <summary>
        /// 服务停止
        /// </summary>
        void Stop()
        {
            log.Info("服务已经停止");
        }
    }
}

2 打包部署

进入 Debug 文件夹,找到程序的.exe文件,管理员身份启动命令窗口,执行MyServices.exe install命令,即可发布该服务到本地,效果如下图,以Windows服务的形式。
启动服务命令:sc start MyServices.exe 卸载服务命令sc delete MyServices
在这里插入图片描述

PS: log4net配置

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs/UpdateLoginType.log" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
 </configuration>

PS : SC常用命令展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31176861/article/details/82869938