1

我发现自己处于一个可怕的境地,我有一个顶级服务,它使用一个存在内存问题的 c++ 库。由于我发现自己所在的地方的这种意愿,我想在它的活动暂停期间不时地调用 TopShelf 重新启动服务,除了“让世界恢复正常”之外没有其他原因。

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

4

2 回答 2

3

Environment.Exit(1);当你想重启服务时打电话

然后在 HostFactory 添加 Enable 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);
                });

            });
于 2018-12-06T09:33:22.097 回答
0

我确信 Topshelf 不支持这一点,因此您必须自己从代码中执行此操作。

看一下ServiceController类。

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

于 2014-07-30T08:18:10.090 回答