# File lib/chef/application/windows_service.rb, line 75
      def service_main(*startup_parameters)

        while running?
          if state == RUNNING
            begin
              # Reconfigure each time through to pick up any changes in the client file
              Chef::Log.info("Reconfiguring with startup parameters")
              reconfigure(startup_parameters)

              splay = rand Chef::Config[:splay]
              Chef::Log.debug("Splay sleep #{splay} seconds")
              sleep splay

              # If we've stopped, then bail out now, instead of going on to run Chef
              next if state != RUNNING

              run_chef_client

              Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
              client_sleep Chef::Config[:interval]
            rescue Chef::Application::Wakeup => e
              Chef::Log.debug("Received Wakeup signal.  Starting run.")
              next
            rescue SystemExit => e
              raise
            rescue Exception => e
              Chef::Log.error("#{e.class}: #{e}")
              Chef::Application.debug_stacktrace(e)
              Chef::Log.error("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
              client_sleep Chef::Config[:interval]
              retry
            end
          else # PAUSED or IDLE
            sleep 5
          end
        end
      end