问题描述
因此,使用Visual Studio创建Windows服务是相当微不足道的.我的问题要深入一些,即实际上可以使可执行的可以安装作为服务以及如何作为直接C应用程序编写服务.我在此上找不到很多参考,但是我认为必须实现一些界面,以便我的.exe可以安装为服务.
推荐答案
设置您的可执行文件作为服务是其中的一部分,但实际上,它通常是由您使用的任何安装软件来处理的.您可以在测试时使用命令行SC工具(或者如果您不需要安装程序).
重要的是,您的程序必须在启动时调用startervicectrldispatcher().这将您的服务连接到服务控制管理器,并设置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; }
其他推荐答案
希望这会有所帮助:
http://support.microsoft.com/kb/kb/251192
看来,您需要简单地使用二进制执行操作以将其注册为服务.
其他推荐答案
基本上,您必须设置一些注册表设置以及某些接口才能实现.
查看以下查看: http://msdn.microsoft.com/en en -us/library/ms685141.aspx
您对SCM感兴趣(服务控制经理).