• Topshelf创建Windows服务


    入门例子

    using log4net;
    using System;
    using System.Timers;
    using Topshelf;
    
    namespace ConsoleAppTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                log4net.Config.XmlConfigurator.Configure();
                HostFactory.Run(x =>
                {
                    x.Service<TownCrier>();
                    x.RunAsLocalSystem(); // 服务使用NETWORK_SERVICE内置帐户运行。身份标识,有好几种方式,如:
                    //x.RunAs("username", "password"); x.RunAsPrompt(); x.RunAsNetworkService(); 
                    x.SetServiceName("ConsoleAppTest服务名称");
                    x.SetDisplayName("ConsoleAppTest显示名称");
                    x.SetDescription("ConsoleAppTest服务描述");
                });
            }
        }
    
        public class TownCrier : ServiceControl
        {
            readonly Timer _timer;
            readonly ILog _log = log4net.LogManager.GetLogger("wolflogInfo");
            public TownCrier()
            {
                //10秒运行一次
                _timer = new Timer(10000) { AutoReset = true };
                _timer.Elapsed += (sender, eventArgs) => _log.Info(DateTime.Now);
            }
    
            bool ServiceControl.Start(HostControl hostControl)
            {
                _log.Info("ConsoleAppTest is Started");
                _timer.Start();
                return true;
            }
    
            bool ServiceControl.Stop(HostControl hostControl)
            {
                _log.Info("ConsoleAppTest is Stop");
                _timer.Start();
                return true;
            }
        }
    
    }

    Log4的config配置

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      </startup>
      <log4net>
        <logger name="wolflogInfo">
          <level value="Info" />
          <appender-ref ref="wolflogInfoFileAppender" />
        </logger>
        <logger name="wolflogError">
          <level value="Error" />
          <appender-ref ref="wolflogErrorFileAppender" />
        </logger>
        <logger name="wolflogALL">
          <level value="ALL" />
          <appender-ref ref="wolflogALLFileAppender" />
        </logger>
        <!-- 绑定使用的名称 -->  
        <appender name="wolflogInfoFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--输出文件夹路径-->
          <param name="File" type="" value="App_Data/Log/Info/" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Date" />
          <!--文件名称命名规则-->
          <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
          <param name="StaticLogFileName" value="false" />
          <param name="MaxSizeRollBackups" value="62" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <!--输出头-->
            <param name="ConversionPattern" value="%n[%d] %c %n%m%n%n" />
          </layout>
        </appender>
        <appender name="wolflogErrorFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <param name="File" type="" value="App_Data/Log/Error/" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Date" />
          <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
          <param name="StaticLogFileName" value="false" />
          <param name="MaxSizeRollBackups" value="62" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="ConversionPattern" value="%n[%d] %c %n%m%n%n" />
          </layout>
        </appender>
        <appender name="wolflogALLFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <param name="File" type="" value="App_Data/Log/ALL/" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Date" />
          <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
          <param name="StaticLogFileName" value="false" />
          <param name="MaxSizeRollBackups" value="62" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="ConversionPattern" value="%n[%d] %c %n%m%n%n" />
          </layout>
        </appender>
      </log4net>
    </configuration>

    安装运行命令

    安装:ConsoleAppTest install
    卸载:ConsoleAppTest uninstall
    启动:ConsoleAppTest start
    停止:ConsoleAppTest stop

    需要用管理员运行程序

    多实例安装

    ConsoleAppTest –instance "ConsoleAppTest2" install
    ConsoleAppTest –instance "ConsoleAppTest2" uninstall
    也可以 sc delete  删除

  • 相关阅读:
    佛學概要十四講表
    冰川时代4中英台词全集
    Linux Mysql 每天定时备份
    zabbix拓扑图
    搭建zabbix 3.4
    ★日常工作保养电脑及设备★
    宽带突然断网了,需要做如下应急措施
    预防这几点,可以让你的电脑长久耐用!!!!
    搭建简易的 DISCUZ论坛
    format 的常见用法
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/8405163.html
Copyright © 2020-2023  润新知