2013-04-02 40 views
2

我使用的代碼從本網站創建一個基本的服務 http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948在通知欄中顯示一個窗口服務的圖標?

,我想這項服務出現在工具欄中的圖標。 我可以從圖標啓動和停止服務嗎?

現在我必須進入SCM來啓動和停止服務,並且需要很長時間才能向下滾動列表並找到服務,然後啓動或停止它。

一些網站都說這不能做,因爲你不能與服務互動 這是真的嗎?

我不在乎這是一個壞主意還是不應該這樣做。我只想知道代碼是否可以完成,所以有人可以幫忙嗎?

+0

「你不能與服務互動」 - 大體上,是的。您可以將您的服務設置爲在我認爲的交互式會話中運行,但我不知道是否可以輕鬆地設置該圖標。無論如何,可能會有多個桌面會話。最好的辦法是爲通知欄編寫一個單獨的小應用程序,以啓動和停止服務。我認爲有一個與Apache HTTPD捆綁在一起 - Apache服務監視器 - 並且可能會提供這些源代碼。 – Rup

+0

所以我不能只是添加一些代碼到現有的程序? –

+0

我以爲你可以,但[此MSDN文章](http://msdn.microsoft.com/en-gb/library/windows/desktop/ms683502.aspx)說,這是不允許從Vista起,但我可能是錯誤。如果您最終編寫了一個單獨的托盤應用程序來控制服務,那麼您可以從以下代碼開始:http://svn.apache.org/repos/asf/httpd/httpd/trunk/support/win32/ – Rup

回答

1

我收到了一個「請避免在評論」的消息中進行擴展討論,所以我提出了這個答案。

寫一個圖標托盤應用程序; this link舉例說明了如何做到這一點(另請參閱文章右側的「相關文章」)。

當您(右鍵)單擊托盤圖標時,圖標托盤應用程序應確定該服務是否已在運行;如果是的話,彈出一個菜單項來停止服務,否則彈出一個菜單項來啓動服務。

回答StackOverflow question指向瞭如何使用Windows API管理服務。

+0

所以我需要創建一個單獨的應用程序?我不能把代碼放到程序中我是使用? –

+0

可以使用新的「-tray」命令行開關將托盤圖標功能添加到服務中,但這會使項目非常複雜,因爲您將擁有兩種不同的功能(服務和托盤 - 圖標應用程序)由不同的命令行開關控制 - 我個人不會推薦它! –

+0

我明白,它不建議,但我真的不想有2個單獨的程序。我想要的是當安裝和運行一個圖標的服務將出現與選項開始和停止。這樣做會非常複雜嗎? –

相關問題