Windows Service started and then stopped using Topshelf

15,644

I have created a Windows Service Project ... I have also created a Windows Service Installer and have successfully installed the Windows Service in Visual Studio's command prompt using: installutil MyWindowsService.exe

Topshelf services are already based on ServiceBase and do their own installation - you have a console application which you can run along with your app in development to see it's working, then when you want to install it as a service you go to a command prompt as an administrator and call MyWindowsService.exe install - see the documentation for all options. It may work wrapped in another service, but I don't see why you'd want to do so.

There's a basic example of a functional service in the docs.

If you do need an installer, there's one at http://www.bjoernrochel.de/2010/01/09/how-to-integrate-a-topshelf-based-service-with-vs-setup-projects/ (but Topshelf's command line syntax has changed since that was written, and it needs updating.)

(Edit: I just noticed that events number 3 and 4 contain the text "Please run 'MyWindowsService .. install')

Share:
15,644
Seany84
Author by

Seany84

Updated on July 01, 2022

Comments

  • Seany84
    Seany84 almost 2 years

    I am using Quartz.net and I am trying to get the Quartz server to start-off in a Windows Service. I have created a Windows Service Project and included the Quartz.net libraries. In my Service class I have:

    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);
        }
    
    }
    

    I have also created a Windows Service Installer and have successfully installed the Windows Service in Visual Studio's command prompt using:

    installutil MyWindowsService.exe

    When I view my service in the Windows service list and try to start the service - I get a message dialog box:

    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.
    

    Here is the output I have logged to the event viewer (log4net):

    Windows Events

    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.. "
    

    Does anyone know how I can get this service to start without this error(s) being thrown?

    Thanks in advance.