in reply to Issues with Win32::Daemon
Incidently, since I started using this skeleton, I have never had a problem starting a service script, so it might be worth a shot for you.#/perl/bin/perl use Win32; use Win32::Daemon; # Specify the amount of time to sleep between # polling the SCM for state changes. # This value is in milliseconds... $SERVICE_SLEEP_TIME = 100; # Start the service by connecting with the SCM and # doing what must be done to be a running service... Win32::Daemon::StartService() || die; $PrevState = SERVICE_START_PENDING; while( SERVICE_STOPPED != ( $State = Win32::Daemon::State() ) ) { if( SERVICE_START_PENDING == $State ) { # Initialization code Win32::Daemon::State( SERVICE_RUNNING ); $PrevState = SERVICE_RUNNING; } elsif( SERVICE_STOP_PENDING == $State ) { Win32::Daemon::State( SERVICE_STOPPED ); } elsif( SERVICE_PAUSE_PENDING == $State ) { # "Pausing..." Win32::Daemon::State( SERVICE_PAUSED ); $PrevState = SERVICE_PAUSED; next; } elsif( SERVICE_CONTINUE_PENDING == $State ) { # "Resuming..." Win32::Daemon::State( SERVICE_RUNNING ); $PrevState = SERVICE_RUNNING; next; } elsif( SERVICE_STOP_PENDING == $State ) { # "Stopping..." Win32::Daemon::State( SERVICE_STOPPED ); $PrevState = SERVICE_STOPPED; next; } elsif( SERVICE_RUNNING == $State ) { # The service is running as normal... # ...add the main code here... #NOTE: This should be code that iterates and #stops,so sleep / wake #can be controlled by the services skeleton. # Check for any outstanding commands. Pass in a #non zero value # and it resets the Last Message to #SERVICE_CONTROL_NONE. if( SERVICE_CONTROL_NONE != ( my $Message = Win32::Daemon::QueryLastMessage( 1 ) ) ) { if( SERVICE_CONTROL_INTERROGATE == $Message ) { # Got here if the Service Control Manager is #requesting # the current state of the service. #This can happen for # a variety of reasons. Report the last state #we set. Win32::Daemon::State( $PrevState ); } elsif( SERVICE_CONTROL_SHUTDOWN == $Message ) { # Yikes! The system is shutting down. #We had better clean up and stop. # Tell the SCM that we are preparing to shutdown # and that we expectit to take 25 seconds # (so don't terminate us for at least 25 # seconds)... Win32::Daemon::State( SERVICE_STOP_PENDING, 25000 ); } else { # Got an unhandled control message. # Set the state to # whatever the previous state was. Win32::Daemon::State( $PrevState ); } } } # Snooze for awhile so we don't suck up cpu time... Win32::Sleep( $SERVICE_SLEEP_TIME ); } # We are done so close down... Win32::Daemon::StopService();
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Issues with Win32::Daemon
by flyingmoose (Priest) on Jan 12, 2004 at 14:26 UTC |