2011-06-17 41 views
0

我在Visual C++中创建了一个服务。安装它使用instsrv.exesrvany.exe。 当我检查控制面板中的服务小程序时,服务已注册。但是,当我想要启动它,出现此消息:如何为Windows服务程序编写OnStart函数?

the service on Local Computer started and then stopped. Some service stop automatically if they have no work to do, for example the Performance logs and Alert Service. 

我只是有这样的代码我的OnStart函数中:

(void)system("C:\ReleaseExe\Example1Server.exe"); 

我我的代码是否正确?或者有没有其他的方式来编码,以确保服务可以处于运行状态?

回答

1

假设你启动的exe实际上是你的服务,这是做错的方法。

Windows服务控制管理器(SCM)通过定义的入口点实际调用您的服务的EXE - 您需要提供逻辑来完成您的特定服务在这些入口点需要的内容,包括通知SCM您的状态更改服务(STOPPED-> RUNNING,RUNNING-> STOPPED等)。

阅读MSDN上的背景信息,从here开始,了解您必须提供的内容。请注意,OnStart特定于在托管代码中实现服务,您不会在Visual C++中这样做。也许C#会是一条更简单的路线?

+0

你的假设是正确的。我的exe是我简单的RPC服务器。到目前为止,当我使用控制台调用RPC服务器时,RPC服务器工作。 – karikari 2011-06-20 00:39:26

+1

接下来会发生什么,OnStart不会被调用。您需要按照http://msdn.microsoft.com/en-us/library/ms685967(v=VS.85).aspx中所述编写服务入口点,ServiceMain和服务控制处理程序。无论如何,你不需要使用'system'来自己执行你的进程 - 这就是SCM所做的。 – 2011-06-20 12:45:30