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

本文关键字:TopShelf 服务 重启 编程 方式 | 更新日期: 2023-09-27 18:14:19

我发现自己处于一个非常糟糕的情况,我有一个使用有内存问题的c++库的顶级服务。由于我发现自己身处这样一个地方,我想调用TopShelf在活动暂停期间时不时地重新启动服务,除了"让世界再次正确"之外,没有其他原因。

是否有任何TopShelf api允许这一点?

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

重新启动服务时调用Environment.Exit(1);

然后在HostFactory添加Enable servicerrecovery

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

我确定Topshelf不支持此功能,因此您必须自己从代码中执行此操作。

看一下ServiceController类。

最坏的情况是你可能有第二个简单的顶层安装程序来管理你当前的服务并重新启动它?(我知道有点脏)