    # 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