2008-09-03 128 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

相關問題