2008-09-03 198 views
7

因此,使用Visual Studio创建Windows服务相当简单。我的问题要深入一些,以确定如何将可执行文件作为服务来安装&如何将服务编写为直通式C应用程序。我找不到很多这方面的参考,但我假设必须有一些我可以实现的接口,以便我的.exe可以作为服务安装。在没有Visual Studio的情况下创建Windows服务

回答

3

将可执行文件设置为服务是其中的一部分,但实际上它通常由您正在使用的任何安装软件来处理。您可以在测试时使用命令行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; 
} 
1

我知道我晚了一点,但我最近也有同样的问题,不得不通过互联网寻找答案。

我在MSDN中设法找到这篇文章,它确实奠定了基础。我最终将许多文件合并到一个包含我需要的所有命令的exe文件中,并添加到我自己的“void run()”方法中,该方法根据自己的需要循环使用服务的整个生命周期。

这将是一个很好的开始给别人使用的正是这种问题,所以对于未来的搜索者那里,检查出来:

完整的服务样品 http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx

相关问题