Win32-services: Windows service applications
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_PROCESStype.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
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 = 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:programmingtest>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.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
startServiceCtrlDispatcherfunction 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_PENDINGstate. It is the user's responsibility to enter theRUNNINGstate as soon as possible.Once the service main function exits two things will occur. The service will enter the
STOPPEDstate, and the handler function will be freed.The
registerServiceCtrlHandlerExfunction is no longer exported. Handlers are registered automatically by thestartServiceCtrlDispatcherfunction.The
queryServiceStatusfunction has been added.
Changes in 0.1
First release
Downloads
- Win32-services-0.2.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
| Versions [RSS] | 0.1, 0.2, 0.2.1, 0.2.2, 0.2.2.1, 0.2.3, 0.2.3.1, 0.2.4, 0.2.5, 0.2.5.1, 0.3, 0.4, 0.4.0.1 (info) |
|---|---|
| Dependencies | base (>=4.5 && <4.6), errors, Win32 [details] |
| Tested with | ghc ==7.4.2 |
| License | BSD-3-Clause |
| Copyright | Copyright (C) 2011-2013 Michael Steele |
| Author | Michael Steele |
| Maintainer | Michael Steele <mikesteele81@gmail.com> |
| Uploaded | by MichaelSteele at 2013-04-07T21:33:47Z |
| Category | System |
| Home page | http://github.com/mikesteele81/win32-services |
| Bug tracker | http://github.com/mikesteele81/win32-services/issues |
| Source repo | head: git clone git://github.com/mikesteele81/win32-services.git |
| Distributions | NixOS:0.4.0.1 |
| Reverse Dependencies | 2 direct, 0 indirect [details] |
| Downloads | 10673 total (30 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating | |
| Status | Docs not available [build log] All reported builds failed as of 2016-12-21 [all 7 reports] |