有没有人有build立Windows服务时使用TopShelf的经验?
试图启动服务时,我一直遇到这个错误,
“Topshelf.HostConfigurators.WindowsServiceDescription服务尚未安装。”
构build,安装程序,安装和所有这些步骤都已完成,并且服务将显示在Windows Server的服务列表中,但是当我单击该服务并尝试启动它时,将抛出此exception。 完整的错误信息如下所示。
INFO 10:23:08作为一个winservice应用程序启动FATAL 10:23:08 Topshelf.HostConfigurators.WindowsServiceDescription服务尚未安装。 请运行RIS.ModelGenerator.Scheduler,版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null install。 错误10:23:08服务exception退出,出现exceptionTopshelf.Exceptions.ConfigurationException:尚未安装Topshelf.HostConfigurators.WindowsServiceDescription服务。 请运行RIS.ModelGenerator.Scheduler,版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null install。 在Topshelf.Windows.WindowsServiceHost.Run()中的d:\ BuildAgent-01 \ work \ 799c08e77fef999d \ src \ Topshelf \ OS \ Windows \ WindowsServiceHost.cs中:第56行在Topshelf.HostFactory.Run(Action`1 configure)in d :\ BuildAgent-01 \ work \ 799c08e77fef999d \ src \ Topshelf \ Config \ HostFactory.cs:第45行
问题很可能是您的服务名称中有空格。 无论出于何种原因,即使该服务可能被安装了一个空间,即“我的服务”,Topshelf 2.2.2.0也可以正确地搜索名称空间中的服务。 当TopShelf搜索服务来检查它是否安装时,它只会查找“我的”。
这里有一个片段可以用来查看你的盒子上安装的服务:
using System; using System.Linq; public class Foo { public static void Main() { foreach(var x in System.ServiceProcess.ServiceController.GetServices().OrderBy(x => x.ServiceName)) { Console.WriteLine("Service Name: '{0}';, Display Name: '{1}'", x.ServiceName, x.DisplayName); } Console.ReadKey(); } }
看来,我有一个版本,只是没有真正的工作(这似乎是最新版本)。 为了解决我的问题,我必须回滚(通过NuGet,感谢)到以前的版本,在v2.0之前。 同样,我正在研究的这个项目也吸引了一些2.0版本的特性/方法,从而导致了后续的问题。
感谢Jeff Schumacher对这个问题的额外帮助。 希望TopShelf软件更新到目前版本没有这些差距。