【问题标题】:Windows service access 'start parameters' from Topshelf从 Topshelf 访问 Windows 服务“启动参数”
【发布时间】:2016-11-14 06:34:32
【问题描述】:

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

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

这很好用。

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

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

我希望多次安装相同的服务(使用不同的实例名称),它们的启动参数不同,我也想用它来传递测试值。

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

谢谢。

【问题讨论】:

  • 查看我的回答 here 了解我是如何绕过这个限制的

标签: windows-services topshelf


【解决方案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)  {  }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多