Topshelf 打包部署Windows服务

mac2025-07-09  3

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>

最新回复(0)