运行GHC创建了Windows可执行文件作为服务

时间:2014-03-30 19:02:42

标签: windows haskell windows-services ghc

我使用Windows Server 2008 GHC 7.6.332-bit上编译了一个程序。我试图在启动时通过windows中的服务运行它(理想情况下保持它)。为此,我已成功使用以下命令创建服务

sc create stworker binPath= "C:\Users\vagrant\Desktop\worker.exe"

我遇到的问题是当我尝试启动服务时收到以下错误(见下图)。

双击它时,可执行文件运行正常。所以不确定为什么Windows不允许运行该服务。

我不认为这是一个问题w / GHC。我假设GHC编译为本机代码而不是MSIL

那么为什么我无法将可执行文件作为服务运行?

enter image description here

1 个答案:

答案 0 :(得分:4)

正如评论中所提到的,您需要实际为您的程序实现Win32服务API以充当Windows服务,并且您可以使用Win32-services包来执行此操作。

我还写了一个包装器包Win32-services-wrapper,旨在提供一些样板和句柄记录,以便定义服务如下所示:

main =
    defineService $
        Service {
            serviceName = "Service",
            -- Start the service given a debug handle to write to.
            -- Make sure not to use stdout or stderr as they don't exist.
            -- Any state needed by serviceStop can be returned here -
            -- the Service type takes the type of the state as a type parameter
            serviceStart = \debugHandle -> ...,
            -- Stop the service given the service state returned by serviceStart
            serviceStop = \serviceState -> ...
        }

有一个在darcsden中使用它的真实例子。