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

posted @ 2019-07-17 15:04  -猪是念来过倒  阅读(251)  评论(0编辑  收藏  举报