TopShelf基础
TopShelf基础文档
Program 文件:
static void Main(string[] args)
{
var rc = HostFactory.Run(x =>
{
x.Service<TownCrier>(s =>
{
//New It
s.ConstructUsing(name => new TownCrier());
//开启
s.WhenStarted(tc => tc.Start());
//关闭
s.WhenStopped(tc => tc.Stop());
});
//运行至本地账户
x.RunAsLocalSystem();
//设置要在windows服务监视器中使用的winservice的描述
x.SetDescription("Sample Topshelf Host");
//设置要在Windows服务监视器中使用的winservice的显示名称
x.SetDisplayName("Stuff");
//设置要在Windows服务监视器中使用的winservice的服务名称
x.SetServiceName("Stuff");
});
var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
Environment.ExitCode = exitCode;
}
TownCrier文件:
public class TownCrier
{
readonly Timer _timer;
public TownCrier()
{
_timer = new Timer(1000) { AutoReset = true };
_timer.Elapsed += (sender, eventArgs) => Console.WriteLine($"It is {DateTime.Now} and all well!");
}
public void Start() { _timer.Start(); }
public void Stop() { _timer.Stop(); }
}
服务启动模式
HostFactory.New(x =>
{
x.StartAutomatically(); // 自启动
x.StartAutomaticallyDelayed(); // 延迟启动,仅在.net framework 4可以使用
x.StartManually(); // 手动启动
x.Disabled(); // 将服务安装为禁用
});
服务自动恢复设置
HostFactory.New(x =>
{
x.EnableServiceRecovery(r =>
{
//恢复操作按指定的顺序执行,下一个操作在上一个操作运行后执行,服务再次失败。有一个 //限制(基于操作系统)可以执行多少操作,通常是2-3个操作。
//崩溃时重新启动计算机(延迟时间,消息)
r.RestartComputer(5, "message");
//重新启动服务(延迟时间)
r.RestartService(0);
//最后一个设置将在后续的奔溃中起作用
//启动某个项目
r.RunProgram(7, "ping google.com");
//仅在崩溃中重启
r.OnCrashOnly();
//将重置间隔设置为一天
r.SetResetPeriod(1);
});
});
服务标志
HostFactory.New(x =>
{
//将服务以此用户名密码运行
x.RunAs("username", "password");
});
HostFactory.New(x =>
{
//安装服务时,安装程序将提示输入用于启动服务的用户名/密码组合
x.RunAsPrompt();
});
HostFactory.New(x =>
{
//使用NETWORK_SERVICE内置帐户运行服务。
x.RunAsNetworkService();
});
HostFactory.New(x =>
{
//使用本地系统帐户运行服务。
x.RunAsLocalSystem();
});
HostFactory.New(x =>
{
//使用本地服务账户运行服务
x.RunAsLocalService();
});
启动服务方式
管理员身份启动命令窗口,执行MyServices.exe install
命令
启动服务命令:sc start MyServices.exe
卸载服务命令sc delete MyServices