zoukankan      html  css  js  c++  java
  • 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  删除

  • 相关阅读:
    获取设备和 App 信息
    使用 UICollectionView 实现网格化视图效果
    UIImage 读取图片内存优化
    使用 stretchableImageWithLeftCapWidth 方法实现可伸缩图片
    使用 StoryBoard 实现左右按钮切换图片的浏览效果
    二维码图片生成(扩展知识:创建带圆角效果的图片)
    Objective-C语法之扩展(Extension)的使用
    Objective-C语法之字符串NSString去掉前后空格或回车符(可以是NSCharacterSet类型的其它字符)
    Objective-C语法之可变参数
    什么时候layoutSubview会被调用
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/8405163.html
Copyright © 2011-2022 走看看