use strict; use Win32::Daemon; # Tell the OS to start processing the service... Win32::Daemon::StartService(); # Wait until the service manager is ready for us to continue... while(SERVICE_START_PENDING != Win32::Daemon::State()) { sleep(1); } # Now let the service manager know that we are running... Win32::Daemon::State( SERVICE_RUNNING ); # Okay, go ahead and process stuff... while(1) { # delete all *.tmp files at c:\temp unlink( glob( "c:\\temp\\*.tmp" ) ); last unless keep_alive(); sleep(5); # and wait last unless keep_alive(); } # Tell the OS that the service is terminating... Win32::Daemon::StopService(); sub keep_alive { my $msg = Wun32::Daemon::QueryLastMessage(); return ( $msg != SERVICE_STOP_PENDING and $msg != SERVICE_CONTROL_SHUTDOWN ); }