Windows服务从Topshelf访问“启动参数”

4

我已经为我的Topshelf程序添加了命令行支持,具体如下:

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

这很好用。

但是当我将它安装为服务后,我希望在已安装的服务“启动参数”中它能够起到同样的作用,但实际上并不行。

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

我希望多次安装相同的服务(具有不同的实例名称),它们由启动参数区分,并且我还希望使用它来传递测试值。

我想仅仅通过编程方式访问标准服务就可以指引我正确地方向。

谢谢。


请查看我的答案这里,了解我是如何绕过这个限制的。 - Amith Sewnarain
1个回答

1

与服务安装相关的参数,如服务名称、描述、实例名称等,可以按以下方式访问

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接