packages feed

Win32-services-0.2.2: Win32-services.cabal

name:           Win32-services
category:       System
version:        0.2.2
cabal-version:  >= 1.14
build-type:     Simple
author:         Michael Steele
maintainer:     Michael Steele <mikesteele81@gmail.com>
copyright:      Copyright (C) 2011-2013 Michael Steele
homepage:       http://github.com/mikesteele81/win32-services
bug-reports:    http://github.com/mikesteele81/win32-services/issues
license:        BSD3
license-file:   LICENSE
tested-with:    GHC == 7.6.3
stability:      provisional
synopsis:       Windows service applications
description:
  This package provides a partial binding to the Win32 System Services
  API. It makes it easy to write Windows service applications using
  Haskell.
  .
  The binding is partial. Here are a few ways in which it differs from the
  official API:
  .
  * Only services running within their own process are supported. These are
  processes of the 'WIN32_OWN_PROCESS' type.
  .
  * In cases where multiple versions of the same function exist (for
  compatibility), this binding only offers one of them.
  .
  * None of the extended control codes are supported. Handlers you write will
  automatically report this to the operating system when such controls are
  received.
  .
  * Only facilities for writing services are supported; not controlling them.
  .
  Effort has been made to simplify using the API without hiding what is
  happening behind the scenes. Users are encouraged to read Microsoft's
  documentation under 'Dev Center - Desktop > Docs > Desktop app development
  documentation > System Services > Services'. The official example has been
  ported to Haskell. This can be found in the 'examples' directory of the
  source tree.
  .
  /Simple Example and Usage/
  .
  @
  module Main where
  .
  import Control.Concurrent.MVar
  import System.Win32.SystemServices.Services
  .
  main = do
  &#x20;   mStop <- newEmptyMVar
  &#x20;   startServiceCtrlDispatcher \"Test\" 3000 (handler mStop) $ \\_ _ h -> do
  &#x20;       setServiceStatus h running
  &#x20;       takeMVar mStop
  &#x20;       setServiceStatus h stopped
  .
  handler mStop hStatus STOP = do
  &#x20;   setServiceStatus hStatus stopPending
  &#x20;   putMVar mStop ()
  &#x20;   return True
  handler _ _ INTERROGATE = return True
  handler _ _ _           = return False
  .
  running = SERVICE_STATUS WIN32_OWN_PROCESS RUNNING [ACCEPT_STOP] nO_ERROR 0 0 0
  stopped = SERVICE_STATUS WIN32_OWN_PROCESS STOPPED [] nO_ERROR 0 0 0
  stopPending = SERVICE_STATUS WIN32_OWN_PROCESS START_PENDING [ACCEPT_STOP] nO_ERROR 0 0 0
  @
  .
  @
  C:\programming\test\>ghc --make -threaded Main.hs
  [1 of 1] Compiling Main             ( Main.hs, Main.o )
  Linking Main.exe ...
  \<linker warnings omitted\>
  C:\\programming\\test\>copy Main.exe c:\\svc\\Test.exe
      1 file(s) copied.
  @
  .
  Execute the following from an elevated command prompt to register the
  service:
  .
  @
  C:\\svc\>sc create Test binPath= c:\\svc\\Test.exe
  [SC] CreateService SUCCESS
  @
  .
  The service can now be started and stopped from the services console.
  .
  Installation Notes:
  .
  Depending on which version of Windows and the Windows SDK you are using the
  .cabal file will need to be modified before installing. A simple `cabal
  install Win32-services` may not work. For example, If you are building on
  Windows 8 64-bit with the Windows 8 SDK the 'extra-lib-dirs' field will need
  to be changed to read as follows:
  .
  @
  Extra-Lib-Dirs: \"C:\\\\Program Files (x86)\\\\Windows Kits\\\\8.0\\\\Lib\\\\win8\\\\um\\\\x86\"
  @
  .
  Release Notes:
  .
  Changes in 0.2.2
  .
  * Update library dependencies to support GHC 7.8.
  .
  Changes in 0.2.1
  .
  * bug fix: Services were failing to enter a STOPPED state. It is now the
    user's responsibility to enter a stopped state in the service main function.
    The 'startServiceCtrlDispatcher' function will continue to automatically put
    the service into a START_PENDING state.
  .
  Changes in 0.2
  .
  * Writing services of the WIN32_OWN_PROCESS type is now easier. Handler
  registration is performed automatically. By the time the service main
  function is entered, the service will already be in the 'START_PENDING'
  state. It is the user's responsibility to enter the 'RUNNING' state as soon
  as possible.
  .
  * Once the service main function exits two things will occur. The service
  will enter the 'STOPPED' state, and the handler function will be freed.
  .
  * The 'registerServiceCtrlHandlerEx' function is no longer
  exported. Handlers are registered automatically by the
  'startServiceCtrlDispatcher' function.
  .
  * The 'queryServiceStatus' function has been added.
  .
  Changes in 0.1
  .
  * First release
extra-source-files: examples/*.hs

source-repository head
  type: git
  location: git://github.com/mikesteele81/win32-services.git

library
  build-depends: base             >= 4.5 && < 4.7
               , errors
               , Win32
  default-language: Haskell2010
  ghc-options:     -Wall
  hs-source-dirs: src
  Exposed-Modules: System.Win32.SystemServices.Services
  Extra-Libraries: Advapi32
  other-modules: System.Win32.SystemServices.Services.SERVICE_STATUS
               , System.Win32.SystemServices.Services.Raw
               , System.Win32.SystemServices.Services.SERVICE_TABLE_ENTRY
               , System.Win32.SystemServices.Services.Types
               , System.Win32.SystemServices.Services.SERVICE_ACCEPT
               , System.Win32.SystemServices.Services.SERVICE_CONTROL
               , System.Win32.SystemServices.Services.SERVICE_STATE
               , System.Win32.SystemServices.Services.SERVICE_TYPE