module Main where import Control.Concurrent.MVar import System.Win32.Services import qualified System.Win32.Error as E main = do mStop <- newEmptyMVar startServiceCtrlDispatcher "Test" 3000 (handler mStop) $ \_ _ h -> do setServiceStatus h running takeMVar mStop setServiceStatus h stopped handler mStop hStatus Stop = do setServiceStatus hStatus stopPending putMVar mStop () return True handler _ _ Interrogate = return True handler _ _ _ = return False running = ServiceStatus Win32OwnProcess Running [AcceptStop] E.Success 0 0 0 stopped = ServiceStatus Win32OwnProcess Stopped [] E.Success 0 0 0 stopPending = ServiceStatus Win32OwnProcess StopPending [AcceptStop] E.Success 0 0 0