在没有Visual Studio的情况下创建Windows服务
因此,使用Visual Studio创建Windows服务相当简单。我的问题要深入一些,以确定如何将可执行文件作为服务来安装&如何将服务编写为直通式C应用程序。我找不到很多这方面的参考,但我假设必须有一些我可以实现的接口,以便我的.exe可以作为服务安装。在没有Visual Studio的情况下创建Windows服务
基本上有一些注册表设置,你必须设置以及一些接口来实现。
看看这个:http://msdn.microsoft.com/en-us/library/ms685141.aspx
您感兴趣的SCM(服务控制管理器)。
将可执行文件设置为服务是其中的一部分,但实际上它通常由您正在使用的任何安装软件来处理。您可以在测试时使用命令行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