该服务在使用Topshelf时没有及时响应启动或控制请求

本文关键字:响应 启动 请求 控制 服务 Topshelf | 更新日期: 2023-09-27 17:57:56

我正在尝试创建一个依赖于命令行输入的顶级服务。但是,当使用命令行参数的配置时,服务无法"及时启动"。

我的服务配置:

如果我删除语言设置的配置并对值进行硬编码,服务就会很好地启动。。。有什么想法吗?

HostFactory.Run(conf =>
{
CultureInfo language = null; 
conf.AddCommandLineDefinition("language", lang => { language = new CultureInfo(lang); });
conf.ApplyCommandLine();
var countryCode = new RegionInfo(language.Name).TwoLetterISORegionName.ToUpper();
conf.SetDescription("{0} Order Broker".FormatWith(countryCode));
conf.SetDisplayName("{0} Order Broker".FormatWith(countryCode));
conf.SetServiceName("{0}OrderBroker".FormatWith(countryCode));
conf.StartAutomatically();
conf.RunAsLocalSystem();
conf.Service<IOrderService>(svc =>
{
   svc.ConstructUsing(name => Creator.Current.Create<IOrderService>());
   svc.WhenStarted(service => service.Start(language));
   svc.WhenStopped(service => service.Stop());
});
});

这是堆叠竞赛:

System.ComponentModel.Win32Exception: The service did not respond to the start
or control request in a timely fashion --- End of inner exception stack trace ---
at System.ServiceProcess.ServiceController.Start(String[] args)
at System.ServiceProcess.ServiceController.Start()
at Topshelf.Runtime.Windows.WindowsHostEnvironment.StartService(String serviceName)
at Topshelf.Hosts.StartHost.Run()

该服务在使用Topshelf时没有及时响应启动或控制请求

所以这里的问题是当语言作为服务启动时没有提供。您需要编辑服务的图像路径以包含该命令行参数。我认为你最好从app.config.

中读到这一点