Service Name

1 HostFactory.New(x =>
2 {
3     x.SetServiceName("MyService");
4 });

Service Description

1 HostFactory.New(x =>
2 {
3     x.SetDescription("My First Topshelf Service");
4 });

Display Name

1 HostFactory.New(x =>
2 {
3     x.SetDisplayName("MyService");
4 });

Instance Name

1 HostFactory.New(x =>
2 {
3     x.SetInstanceName("MyService");
4 });

The service can be configured in multiple ways, each with different goals. For services that can handle a dependency on Topshelf, the ServiceControl interface provides a lot of value for implementing the service control methods. Additionally, a zero-dependency solution is also available when lambda methods can be used to call methods in the service class.


Simple Service

To configure a simple service, the easiest configuration method is available.

1 HostFactory.New(x =>
2 {
3     x.Service<MyService>();
4 });
5 
6 // Service implements the ServiceControl methods directly and has a default constructor
7 class MyService : ServiceControl
8 {}

 

If the service does not have a default constructor, the constructor can be specified, allowing the service to be created by the application, such as when a container needs to be used.

如果服务不包含一个默认的构造函数,允许应用程序的服务指定构造函数,

HostFactory.New(x =>
{
    x.Service<MyService>(() => ObjectFactory.GetInstance<MyService>());
});

// Service implements the ServiceControl methods directly and has a default constructor
class MyService : ServiceControl
{
    public MyService(SomeDependency dependency)
    {}
}

 

If the service needs access to the HostSettings during construction, they are also available as an overload.

如果服务在构造函数中需要读取HostSetting,他们作为过载也是有效的(意思就是可以通过构造函数的参数传递过去

HostFactory.New(x =>
{
    x.Service<MyService>(hostSettings => new MyService(hostSettings));
});

// Service implements the ServiceControl methods directly and has a default constructor
class MyService : ServiceControl
{
    public MyService(HostSettings settings)
    {}
}

 

Custom Service 自定义服务

To configure a completely custom service, such as one that has no dependencies on Topshelf, the following configuration is available.

HostFactory.New(x =>
{
    x.Service<MyService>(sc =>
    {
        sc.ConstructUsing(() => new MyService());

        // the start and stop methods for the service
        sc.WhenStarted(s => s.Start());
        sc.WhenStopped(s => s.Stop());

        // optional pause/continue methods if used
        sc.WhenPaused(s => s.Pause());
        sc.WhenContinued(s => s.Continue());

        // optional, when shutdown is supported
        sc.WhenShutdown(s => s.Shutdown());
    });
});

 

Each of the WhenXxx methods can also take an argument of the HostControl interface, which can be used to request the service be stopped, request additional start/stop time, etc.

每个WhenXXX方法可以有一个HostControl接口类型的参数,

HostFactory.New(x =>
{
    x.Service<MyService>(sc =>
    {
        sc.WhenStarted((s, hostControl) => s.Start(hostControl));
    }
}

 

The HostControl interface can be retained and used as the service is running to Stop the service.

Service Start Modes

There are multiple service start modes, each of which can be specified by the configuration. This option is only used if the service is being installed.

HostFactory.New(x =>
{
    x.StartAutomatically(); // Start the service automatically 自动模式
    x.StartAutomaticallyDelayed(); // Automatic (Delayed) -- only available on .NET 4.0 or later  自动延迟
    x.StartManually(); // Start the service manually  手动模式
    x.Disabled(); // install the service as disabled  禁用模式
});

 

Service Recovery

Topshelf also exposes the options need to configure the service recovery options as well.

HostFactory.New(x =>
{
    x.EnableServiceRecovery(r =>
    {
        //you can have up to three of these
        r.RestartComputer(5, "message");
        r.RestartService(0);
        //the last one will act for all subsequent failures
        r.RunProgram(7, "ping google.com");

        //should this be true for crashed or non-zero exits
        r.OnCrashOnly();

        //number of days until the error count resets
        r.SetResetPeriod(1);
    });
});

 

Service Identity  服务身份

Services can be configured to run as a number of different identities, using the configuration option that is most appropriate.

服务可以被配置为以不同的身份运行,使用以下选项配置最合适。(如果要以不同的身份运行服务,请使用以下方式配置

HostFactory.New(x =>
{
    x.RunAs("username", "password");
});

Runs the service using the specified username and password. This can also be configured using the command-line.

使用指定的用户名和密码运行服务。也可以再命令行中配置。

HostFactory.New(x =>
{
    x.RunAsPrompt();
});

When the service is installed, the installer will prompt for the username/password combination used to launch the service.

HostFactory.New(x =>
{
    x.RunAsNetworkService();
});

Runs the service using the NETWORK_SERVICE built-in account.

使用帐户运行服务。

HostFactory.New(x =>
{
    x.RunAsLocalSystem();
});

Runs the service using the local system account.

HostFactory.New(x =>
{
    x.RunAsLocalService();
});

Runs the service using the local service account.

Custom Install Actions  自定义安装动作

These settings allow user-specified code to be executed during the service install/uninstall process.

在服务启动/卸载的过程中,允许执行用户指定代码。(即启动/卸载过程中允许用户执行自定义代码

Before Install Actions 安装前

Topshelf allows actions to be specified that are executed before the service is installed. Note that this action is only executed if the service is being installed.

HostFactory.New(x =>
{
    x.BeforeInstall(() => { ... });
});

After Install Actions  安装后

Topshelf allows actions to be specified that are executed after the service is installed. Note that this action is only executed if the service is being installed.

HostFactory.New(x =>
{
    x.AfterInstall(() => { ... });
});

Before Uninstall Actions  卸载前

Topshelf allows actions to be specified that are executed before the service is uninstalled. Note that this action is only executed if the service is being uninstalled.

HostFactory.New(x =>
{
    x.BeforeUninstall(() => { ... });
});

After Uninstall Actions  卸载后

Topshelf allows actions to be specified that are executed after the service is uninstalled. Note that this action is only executed if the service is being uninstalled.

HostFactory.New(x =>
{
    x.AfterUninstall(() => { ... });
});

Service Dependencies  服务依赖

Service dependencies can be specified such that the service does not start until the dependent services are started. This is managed by the windows services control manager, and not by Topshelf itself.

HostFactory.New(x =>
{
    x.DependsOn("SomeOtherService");
});

There are a number of built-in extension methods for well-known services, including:

有一些内置的服务依赖扩展方法为知名的服务提供,包括:

HostFactory.New(x =>
{
    x.DependsOnMsmq(); // Microsoft Message Queueing
    x.DependsOnMsSql(); // Microsoft SQL Server
    x.DependsOnEventLog(); // Windows Event Log
    x.DependsOnIis(); // Internet Information Server
});

Advanced Settings  提升设置

EnablePauseAndContinue  

Specifies that the service supports pause and continue, allowing the services control manager to pass pause and continue commands to the service.

指定服务支持暂停和继续,允许服务控制管理器向服务传送暂停和继续命令。

HostFactory.New(x =>
{
    x.EnablePauseAndContinue();
});

EnableShutdown  快速关闭服务

Specifies that the service supports the shutdown service command, allowing the services control manager to quickly shutdown the service.

HostFactory.New(x =>
{
    x.EnableShutdown();
});

Service Recovery  服务恢复

To configure the service recovery options, a configurator is available to specify one or more service recovery actions. The recovery options are only used when installing the service, and are set once the service has been successfully installed.

HostFactory.New(x =>
{
    x.EnableServiceRecovery(rc =>
    {
        rc.RestartService(1); // restart the service after 1 minute
        rc.RestartSystem(1, "System is restarting!"); // restart the system after 1 minute
        rc.RunProgram(1, "notepad.exe"); // run a program
        rc.SetResetPeriod(1); // set the reset interval to one day
    })
});

The recovery actions are executed in the order specified, with the next action being executed after the previous action was run and the service failed again. There is a limit (based on the OS) of how many actions can be executed, and is typically 2-3 actions.

恢复操作按指定的顺序被执行,前一个恢复操作执行完之后下一个才会执行,有多少个恢复操作被执行有限制的(依赖于操作系统),典型的是由2-3个恢复操作。

 

 

相关文章:

  • 2021-05-02
  • 2022-12-23
  • 2020-01-10
  • 2021-06-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-04
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
相关资源
相似解决方案