module Main where import Control.Concurrent.MVar import System.Win32.SystemServices.Services main = startServiceCtrlDispatcher "Test" $ \name _ -> do mStop <- newEmptyMVar hStatus <- registerServiceCtrlHandlerEx name $ handler mStop setServiceStatus hStatus running takeMVar mStop setServiceStatus hStatus stopped handler mStop hStatus STOP = do setServiceStatus hStatus stopPending putMVar mStop () return True handler _ _ INTERROGATE = return True handler _ _ _ = return False stopped = SERVICE_STATUS WIN32_OWN_PROCESS STOPPED [] nO_ERROR 0 0 0 stopPending = stopped { currentState = STOP_PENDING , waitHint = 3000 } running = stopped { currentState = RUNNING , controlsAccepted = [ACCEPT_STOP] }