我使用Windows Server 2008
GHC 7.6.3
在32-bit
上编译了一个程序。我试图在启动时通过windows中的服务运行它(理想情况下保持它)。为此,我已成功使用以下命令创建服务
sc create stworker binPath= "C:\Users\vagrant\Desktop\worker.exe"
我遇到的问题是当我尝试启动服务时收到以下错误(见下图)。
双击它时,可执行文件运行正常。所以不确定为什么Windows不允许运行该服务。
我不认为这是一个问题w / GHC
。我假设GHC
编译为本机代码而不是MSIL
。
那么为什么我无法将可执行文件作为服务运行?
答案 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
中使用它的真实例子。