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

Sea*_*y84 6 c# windows-services quartz.net topshelf

我正在使用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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我还创建了一个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.
Run Code Online (Sandbox Code Playgroud)

这是我记录到事件查看器(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."
Run Code Online (Sandbox Code Playgroud)

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)"
Run Code Online (Sandbox Code Playgroud)

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'. "
Run Code Online (Sandbox Code Playgroud)

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'. "
Run Code Online (Sandbox Code Playgroud)

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 "
Run Code Online (Sandbox Code Playgroud)

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 "
Run Code Online (Sandbox Code Playgroud)

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' "
Run Code Online (Sandbox Code Playgroud)

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 "
Run Code Online (Sandbox Code Playgroud)

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.. "
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

stu*_*rtd 10

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

Topshelf服务已经基于ServiceBase,做自己的安装-你有一个控制台应用程序,你可以随着发展你的应用程序运行,看到它的工作,然后当你想要安装它作为你去一个命令提示符作为服务管理员和电话MyWindowsService.exe install- 请参阅所有选项的文档.它可能包含在另一个服务中,但我不明白你为什么要这样做.

在文档中有一个功能服务的基本示例.

如果你确实需要一个安装程序,有一个在http://www.bjoernrochel.de/2010/01/09/how-to-integrate-a-topshelf-based-service-with-vs-setup-projects/(但Topshelf的命令行语法自编写以来发生了变化,需要更新.)

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