2

我将我的程序注册为 Windows 服务。当我重新启动 Windows 时,该服务将永远 START_PENDING。跟踪后,我发现它挂在 CreateService 函数上。

hService=CreateService( hSCManager,
                            pszDriverName,
                            pszDriverName,
                            SERVICE_ALL_ACCESS,
                            SERVICE_KERNEL_DRIVER,
                            SERVICE_DEMAND_START,
                            SERVICE_ERROR_NORMAL,
                            pszDriverPath,
                            NULL,
                            NULL,
                            NULL,
                            NULL,
                            NULL);

我可以通过在重新启动之前创建服务来解决问题,但我想知道发生了什么挂起。有人有什么主意吗?

4

2 回答 2

1

如果我没记错的话,服务只能创建一次。您不必再次调用 CreateService 函数!而且我不建议在 Windows 启动过程中创建它。

正如您在以下 MSDN 示例中所见,您必须使用“安装”命令行参数启动给定的示例软件来创建服务。在任何其他情况下,该服务都被视为已安装。

注意示例中使用 StartServiceCtrlDispatcher 函数来启动服务主函数(在本例中为 SvcMain)。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb540476(v=vs.85).aspx

于 2012-06-04T13:37:54.220 回答
0

具有服务的应用程序通常具有注册和安装其服务的安装程序。当您安装应用程序时,所有服务都已创建并注册,并且在引导系统时无需再次安装它们。Windows 在启动服务时将此函数作为常规函数执行。

您上面提到的功能用于在应创建新服务时在安装程序中安装服务。

于 2012-06-04T16:04:52.490 回答