C# 在Topshelf服务中重新启动self

C# 在Topshelf服务中重新启动self,c#,.net,topshelf,C#,.net,Topshelf,我正在使用Topshelf托管Windows服务。我希望让托管服务调用,以便在发生某些事件时重新启动自己。我想知道如何做到这一点 谢谢, Ben如果您知道调用restart的服务名称,则可以使用服务管理器。它可能工作,也可能不工作。这不是Topshelf揭露的事情,所以你可以自己做 调用环境。退出(1)何时需要重新启动服务 然后在HostFactory中添加EnableServiceRecovery HostFactory.Run(configure => {

我正在使用Topshelf托管Windows服务。我希望让托管服务调用,以便在发生某些事件时重新启动自己。我想知道如何做到这一点

谢谢,
Ben

如果您知道调用restart的服务名称,则可以使用服务管理器。它可能工作,也可能不工作。这不是Topshelf揭露的事情,所以你可以自己做

调用
环境。退出(1)何时需要重新启动服务

然后在HostFactory中添加EnableServiceRecovery

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);
                });

            });
HostFactory.Run(配置=>
{
configure.Service((ServiceConfigurator服务)=>
{
service.WhenStarted(s=>s.Start());
停止时的服务(s=>s.Stop());
});
//Windows服务用于运行的安装程序帐户。
configure.RunAsNetworkService();
configure.SetServiceName(“ServiceName”);
configure.SetDisplayName(“ServiceName”);
configure.SetDescription(“Description”);
configure.StartAutomaticallyDelayed();
configure.EnableServiceRecovery(recoveryOption=>
{
recoveryOption.RestartService(0);
});
});

您所说的“某些事件”是什么意思?这个问题需要更多的描述。同意@RoyDictus-您当然可以让TopShelf主机重新启动(使用HostControl接口),但如何调用它具体取决于您对“事件”的定义。我们实现了一个RPC接口来接收命令。在收到某个命令后,服务应该重新启动自身。我认为我们宁愿避免直接与Windows服务API交互,而使用Topshelf本身来重新启动服务。听起来我需要研究如何使用HostControl接口。目前我启动了这项服务;HostFactory.Run(委托)。我想我必须改变它的用法。你最终找到解决方法了吗?