簡體   English   中英

將C ++程序轉換為Windows服務?

[英]Convert a C++ program to a Windows service?

我編寫了一個控制台程序,可以“完成任務”-主要是使用boost。 如何將其轉換為Windows服務? 我應該對Windows服務有什么了解?

有一個很好的示例,說明了如何在MSDN上設置最低服務 請參閱有關編寫主要功能,入口點和示例代碼的部分。

構建並運行Windows服務之后,您將發現下一個主要的難題:調試很麻煩。 沒有終端(因此沒有stdout / stderr),並且在您嘗試運行可執行文件時,它實際上會啟動服務,然后返回給您。

我發現非常有用的一個技巧是在您的應用程序中添加-foreground選項,這樣,如果您使用該標志運行,那么它將繞過服務啟動程序代碼,而像常規控制台應用程序一樣運行,這使得調試變得非常容易。 在VS.Net中,設置調試選項以使用該標志調用。

有一個很好的例子在MSDN上這里

這是一個具有自我安裝/卸載功能的樣板C ++服務項目,並將服務的啟動和停止事件記錄到Windows事件日志中。 可以像其他服務一樣通過服務應用程序(snapin)停止和啟動它。 您可能最初希望為其授予LocalSystem權限以使其正常運行,因為至少在xp上,它沒有足夠的權限才能從項目提供的LocalService權限開始。 盡管已下載的說明另有說明,但Visual Studio 2008項目在其他情況下仍是開箱即用的。

有點晚了,但我希望這對其他人有幫助。

您可以使用CodeProject中的此工具來“包裝”它:

http://www.codeproject.com/KB/system/xyntservice.aspx

值得一看。

最簡單的解決方案可能是在Visual Studio中創建一個新的Windows Service項目,然后將您的代碼復制到新項目中。

如果您重構代碼,以便將UI(在本例中為控制台)與邏輯分開,則可以創建一個可以完成工作的庫,然后從Console項目和Service Project中進行調用。

您可以配置一個應用作為服務通過使用SRVANY工具,這是一部分運行在Windows Server 2003 Resource Kit工具。

Srvany一次僅允許一項服務。 因此,我編寫了srvany(sFany),使nginx和php-cgi一起作為Windows服務運行。 這是源https://github.com/stxh/sFany

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM