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>