3

我在我的 topshelf 程序中添加了命令行支持,如下所示:

HostFactory.Run(hostConfigurator =>
{
    hostConfigurator.AddCommandLineDefinition("params", f => { startParams = f; });    
    hostConfigurator.ApplyCommandLine(); 
}

这很好用。

当我将它作为服务安装时,我希望在已安装的服务“启动参数”中它可以达到相同的目的,但事实并非如此。

谁能告诉我如何从 TopShelf 访问“启动参数”?

我希望多次安装相同的服务(具有不同的实例名称),这些服务因启动参数而异,我也想用它来传递测试值。

我想只是简单地以编程方式访问这些标准服务可能会为我指明正确的方向。

谢谢。

4

1 回答 1

1

与Service安装相关的参数,如servicename、description、instancename等可以通过如下方式访问

HostFactory.Run(x =>
{
    x.Service((ServiceConfigurator<MyService> s) =>
    {
        s.ConstructUsing(settings =>
        {
            var instanceName= settings.InstanceName;
                return new MyService();
        });
    }
}

或者,如果您的 MyService 实现了 ServiceControl

        HostFactory.Run(x =>
        {
            x.Service<MyService>((s) =>
            {
                var instanceName= s.InstanceName;

                return new MyService();
            });
         }
/***************************/

class MyService : ServiceControl
{
    public bool Start(HostControl hostControl) {  }

    public bool Stop(HostControl hostControl)  {  }
}

我不确定您所说的“启动参数”是什么意思,如果上面不是您想要的,请尝试用伪代码示例解释您要实现的目标。

于 2014-11-14T21:53:56.297 回答