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>