以编程方式重新启动c#TopShelf服务

时间:2014-07-23 15:44:35

标签: c# topshelf

我发现自己处于一种可怕的情况,我有一个使用带有内存问题的c ++库的topshelf服务。由于我发现自己所处的地方的这种观点,我想让TopShelf不时重新启动服务,暂停其活动,除了“让世界再次成为现实”。

是否有任何TopShelf API允许这样做?我似乎无法在文档中找到任何内容。

2 个答案:

答案 0 :(得分:1)

我确信Topshelf不支持这个,所以你必须自己从代码中做到这一点。

查看ServiceController课程。

最糟糕的情况是,您可以使用第二个简单的topshelf安装程序来管理您当前的服务并重新启动它吗? (我知道有点脏)

答案 1 :(得分:1)

当您要重新启动服务时致电Environment.Exit(1);

然后在HostFactory中添加启用ServiceRecovery

HostFactory.Run(configure =>
            {
                configure.Service((ServiceConfigurator<Service> service) =>
                {

                    service.WhenStarted(s => s.Start());
                    service.WhenStopped(s => s.Stop());
                });

                //Setup Account that window service use to run.  
                configure.RunAsNetworkService();
                configure.SetServiceName("ServiceName");
                configure.SetDisplayName("ServiceName");
                configure.SetDescription("Description");
                configure.StartAutomaticallyDelayed();
                configure.EnableServiceRecovery(recoveryOption =>
                {
                    recoveryOption.RestartService(0);
                });

            });