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>