Windows服务已启动,然后使用Topshelf停止

我正在使用Quartz.net,我试图让Quartz服务器在Windows服务中启动。 我创建了一个Windows服务项目并包含了Quartz.net库。 在我的服务类中,我有:

protected override void OnStart(string[] args) { try { Host host = HostFactory.New(x => { x.Service(s => { s.SetServiceName("quartz.server"); s.ConstructUsing(builder => { QuartzServer server = new QuartzServer(); server.Initialize(); return server; }); s.WhenStarted(server => server.Start()); s.WhenPaused(server => server.Pause()); s.WhenContinued(server => server.Resume()); s.WhenStopped(server => server.Stop()); }); x.RunAsLocalService(); //x.RunAs(@"mydomain\mysusername", "mypassword"); x.SetDescription(Configuration.ServiceDescription); x.SetDisplayName(Configuration.ServiceDisplayName); x.SetServiceName(Configuration.ServiceName); }); host.Run(); } catch (Exception ex) { Log.Error(ex.Message); Log.Error(ex.InnerException.Message); } } 

我还创建了一个Windows服务安装程序,并使用以下命令在Visual Studio的命令提示符中成功安装了Windows服务:

installutil MyWindowsService.exe

当我在Windows服务列表中查看我的服务并尝试启动该服务时 – 我收到一个消息对话框:

 The MyWindowsService service on Local Computer started and the stopped. Some Services stop automatically if they are not in use by other services or programs. 

这是我记录到事件查看器(log4net)的输出:

Windows事件

1

 Information 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:24,044 [11528] INFO Common.Logging.Factory.AbstractLogger.Info(:0) - Finished Starting MyProject Windows Service." 

2

 Error 05/12/2012 14:52 Service1 "Service cannot be started. System.NullReferenceException: Object reference not set to an instance of an object. at MyWindowsService.MyProject.OnStart(String[] args) in c:\My Projects\MyProject v40\CO40\MyWindowsService\MyProject.cs:line 58 at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)" 

3

 Error 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:24,042 [6048] ERROR Common.Logging.Factory.AbstractLogger.Error(:0) - The Topshelf.HostConfigurators.WindowsServiceDescription service has not been installed yet. Please run 'MyWindowsService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null install'. " 

4

 Error 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:24,041 [6048] FATAL Topshelf.Windows.WindowsServiceHost.Run(:0) - The Topshelf.HostConfigurators.WindowsServiceDescription service has not been installed yet. Please run 'MyWindowsService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null install'. " 

 Information 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:24,039 [6048] INFO Topshelf.Windows.WindowsServiceHost.Run(:0) - Starting up as a winservice application " 

6

 Information 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:24,038 [6048] DEBUG Topshelf.Builders.RunBuilder.CreateHost(:0) - Running as a Windows service, using the service host " 

7

 Information 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:24,027 [6048] INFO Topshelf.OS.OsDetector.DetectOs(:0) - Detected the operating system: 'win' " 

8

 Information 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:23,895 [6048] INFO Topshelf.HostConfigurators.HostConfiguratorImpl.CreateHost(:0) - Topshelf v2.2.2.0, .NET Framework v4.0.30319.17929 " 

9

 Information 05/12/2012 14:52 MyWindowsService.exe "2012-12-05 14:52:23,829 [11528] INFO Common.Logging.Factory.AbstractLogger.Info(:0) - Starting MyProject Windows Service.. " 

有没有人知道如何在没有抛出此错误的情况下启动此服务?

提前致谢。

我创建了一个Windows服务项目…我还创建了一个Windows服务安装程序,并使用以下命令在Visual Studio的命令提示符下成功安装了Windows服务:installutil MyWindowsService.exe

Topshelf服务已基于ServiceBase并自行安装 – 您有一个控制台应用程序,您可以在开发中运行您的应用程序以查看它是否正常工作,然后当您要将其作为服务安装时,您将转到命令提示符管理员并调用MyWindowsService.exe install – 请参阅所有选项的文档 。 它可能包含在另一个服务中,但我不明白你为什么要这样做。

在文档中有一个function服务的基本示例。

如果您确实需要安装程序, 请访问http://www.bjoernrochel.de/2010/01/09/how-to-integrate-a-topshelf-based-service-with-vs-setup-projects/ (但是自编写以来,Topshelf的命令行语法已经改变,需要更新。)

(编辑:我刚注意到3号和4号事件包含文本“请运行’MyWindowsService .. install’)

尝试删除. 来自s.SetServiceName("quartz.server"); 当我用于SetServiceName的值不仅仅是az字符时,我遇到了麻烦。

这是服务在Windows服务中注册的名称(用于sc start quartzserver

如果我正确读取日志,看起来Topshelf.HostConfigurators.WindowsServiceDescription服务未安装或未运行。

您还在c:\My Projects\MyWindowsService\Service1.cs第58行上有一个NRE。 这可能与先前的错误有关。

您的下一个选择是直接向TopShelf社区寻求帮助: http ://topshelf-project.com/contact/