使用Visual Studio创建Windows服务相对简单。我的问题更深入,是关于什么使可执行文件可以安装为服务以及如何编写纯C应用程序的服务。我找不到很多相关参考资料,但我认为必须有一些接口可以实现,以便我的.exe文件可以安装为服务。
使用Visual Studio创建Windows服务相对简单。我的问题更深入,是关于什么使可执行文件可以安装为服务以及如何编写纯C应用程序的服务。我找不到很多相关参考资料,但我认为必须有一些接口可以实现,以便我的.exe文件可以安装为服务。
将可执行文件设置为服务是其中的一部分,但实际上通常由您使用的安装软件处理。您可以在测试时(或者如果您不需要安装程序)使用命令行SC工具。
重要的是,您的程序必须在启动时调用StartServiceCtrlDispatcher()。这将连接您的服务到服务控制管理器,并设置一个ServiceMain例程,它是您服务的主入口点。
ServiceMain(实际上您可以随便取名字,但似乎总是叫ServiceMain)然后应该调用RegisterServiceCtrlHandlerEx()来定义回调例程,以便操作系统在发生某些事件时通知您的服务。
以下是我几年前编写的一个服务的一些片段:
设置为服务:
SERVICE_TABLE_ENTRY ServiceStartTable[] =
{
{ "ServiceName", ServiceMain },
{ 0, 0 }
};
if (!StartServiceCtrlDispatcher(ServiceStartTable))
{
DWORD err = GetLastError();
if (err == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
return false;
}
ServiceMain:
void WINAPI ServiceMain(DWORD, LPTSTR*)
{
hServiceStatus = RegisterServiceCtrlHandlerEx("ServiceName", ServiceHandlerProc, 0);
服务处理程序:
DWORD WINAPI ServiceHandlerProc(DWORD ControlCode, DWORD, void*, void*)
{
switch (ControlCode)
{
case SERVICE_CONTROL_INTERROGATE :
// update OS about our status
case SERVICE_CONTROL_STOP :
// shut down service
}
return 0;
}
我知道我有点晚来参加这个派对,但最近我也遇到了同样的问题,不得不在互联网上苦苦寻找答案。
我设法在 MSDN 上找到了这篇文章,确实奠定了基础。最终,我将这里的许多文件合并成一个包含我需要的所有命令的单个 exe 文件,并添加了自己的“void run()”方法,以满足自己的需求。
对于其他有着完全相同问题的人来说,这将是一个很好的起点,因此,对于未来的搜索者,请查看以下内容:
完整的服务示例 http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx
基本上,您需要设置一些注册表设置以及实现一些接口。
请查看此链接:http://msdn.microsoft.com/en-us/library/ms685141.aspx
您对SCM(服务控制管理器)感兴趣。