不使用Visual Studio创建Windows服务

时间:2008-09-03 13:47:03

标签: c windows visual-studio windows-services

因此,使用Visual Studio创建Windows服务相当简单。我的问题更深入地说明了实际上可以将可执行文件安装为服务和安装的问题。如何将服务编写为直接C应用程序。我找不到很多关于此的参考资料,但我认为必须有一些我可以实现的接口,所以我的.exe可以作为服务安装。

4 个答案:

答案 0 :(得分: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 :(得分:1)

希望这会有所帮助:

http://support.microsoft.com/kb/251192

看起来您只需要对二进制可执行文件运行此exe来将其注册为服务。

答案 2 :(得分:1)

基本上,您必须设置一些注册表设置以及要实现的一些接口。

看看这个:http://msdn.microsoft.com/en-us/library/ms685141.aspx

您对SCM(服务控制管理器)感兴趣。

答案 3 :(得分:1)

我知道我参加派对有点晚了,但我最近遇到了同样的问题,并且不得不通过互联网寻找答案。

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

对于这个问题,对于其他人来说,这将是一个很好的开始,所以对于未来的搜索者来说,请查看:

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