我想在安装并通过TopShelf将其作为Windows服务启动时将一些自定义参数传递给控制台应用程序。
当我使用时:
MyService install start /fooBar: Test
控制台应用程序失败:
问题:
如何使TopShelf识别我的论据,以便可以使用它们的值?
最佳答案
编辑:这仅在运行.exe时有效,而不是作为服务运行时。或者,您可以将选项添加为配置值,并在启动时读取它(无论如何,这可能是更好的做法):
using System.Configuration;
// snip
string foobar = null;
HostFactory.Run(configurator =>
{
foobar = ConfigurationManager.AppSettings["foobar"];
// do something with fooBar
configurator.Service<ServiceClass>(settings =>
{
settings.ConstructUsing(s => GetInstance<ServiceClass>());
settings.WhenStarted(s => s.Start());
settings.WhenStopped(s => s.Stop());
});
configurator.RunAsLocalService();
configurator.SetServiceName("ServiceName");
configurator.SetDisplayName("DisplayName");
configurator.SetDescription("Description");
configurator.StartAutomatically();
});
根据文档,您需要在此模式中指定命令:
-foobar:Test
您还需要在服务配置中添加定义:
string fooBar = null;
HostFactory.Run(configurator =>
{
configurator.AddCommandLineDefinition("fooBar", f=> { fooBar = f; });
configurator.ApplyCommandLine();
// do something with fooBar
configurator.Service<ServiceClass>(settings =>
{
settings.ConstructUsing(s => GetInstance<ServiceClass>());
settings.WhenStarted(s => s.Start());
settings.WhenStopped(s => s.Stop());
});
configurator.RunAsLocalService();
configurator.SetServiceName("ServiceName");
configurator.SetDisplayName("DisplayName");
configurator.SetDescription("Description");
configurator.StartAutomatically();
});
关于c# - 如何使用TopShelf无法识别的CommandLine Arguments?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15004212/