我正在使用Quartz.net,我试图让Quartz服务器在Windows服务中启动。我创建了一个Windows服务项目并包含了Quartz.net库。在我的服务类中,我有:
protected override void OnStart(string[] args)
{
try
{
Host host = HostFactory.New(x =>
{
x.Service<IQuartzServer>(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)的输出:
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'. "
5
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.. "
有没有人知道如何在不抛出此错误的情况下启动此服务?
提前致谢。
答案 0 :(得分:10)
我创建了一个Windows服务项目...我还创建了一个Windows服务安装程序并且已成功完成 使用以下命令在Visual Studio的命令提示符中安装Windows服务: installutil MyWindowsService.exe
Topshelf服务已基于ServiceBase 并进行自己的安装 - 您有一个控制台应用程序,您可以在开发中运行您的应用程序以查看它是否正常工作,然后当您要安装它时作为服务,您以管理员身份转到命令提示符并致电MyWindowsService.exe install
- 有关所有选项,请参阅the documentation。它可能包含在另一个服务中,但我不明白你为什么要这样做。
功能服务的基本示例in the docs。
如果你确实需要一个安装程序,那么http://www.bjoernrochel.de/2010/01/09/how-to-integrate-a-topshelf-based-service-with-vs-setup-projects/就有一个(但Topshelf的命令行语法自编写以来已经改变,需要更新。)
(编辑:我刚注意到第3和第4个事件包含文本“请运行'MyWindowsService .. install')
答案 1 :(得分:0)
尝试从.
s.SetServiceName("quartz.server");
删除我SetServiceName
使用的值不仅仅是a-z字符时遇到的问题。
这是服务在Windows服务中注册的名称(您用来做sc start quartzserver
的名称)
答案 2 :(得分:0)
当我使用不同的“服务名称”和“显示名称”值时,出现此错误。 我有“ Auditing.Service”和“ Auditing Service”,并将它们都更改为“ Auditing.Service”,然后启动了Windows服务。
所以我的建议是:使服务和显示名称匹配。
答案 3 :(得分:-1)
如果我正确阅读日志,看起来Topshelf.HostConfigurators.WindowsServiceDescription
服务未安装或未运行。
你在c:\My Projects\MyWindowsService\Service1.cs
的第58行也有一个NRE。这可能与之前的错误有关。
您的下一个选择是直接向TopShelf社区寻求帮助:http://topshelf-project.com/contact/