2011-06-17 27 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

相關問題