簡體   English   中英

在C#中,您可以將Windows窗體應用程序作為服務啟動嗎?

[英]In C#, can you make a windows form application start as a service?

我有一個GUI C #Windows窗體程序,我希望在計算機啟動時作為服務啟動,並且可能在系統托盤中有一個圖標,當單擊時最大化程序。 這可能沒有重大的返工嗎?

謝謝

Windows服務不能擁有GUI,至少不能直接使用GUI。 您必須將應用程序與表示層/流程和服務層/流程分開:

  • 表示層仍將是WinForms應用程序
  • 服務層將作為Windows服務運行

他們兩個將不得不通過一些進程間通信方式相互通信,如命名管道或套接字。

您可以使用第三方應用程序(如FireDaemon( http://www.firedaemon.com/ ))將任何程序作為服務啟動。 FireDaemon中有許多選項,例如表單可見性,失敗時重啟等。但是,它不會自動為您的應用程序創建托盤圖標。 因此,您的應用必須更改為具有自己的托盤圖標功能,FireDaemon將啟動該程序並管理該過程。

FireDaemon的價格約為40美元。 我想有許多其他類似的應用程序可用。

我將首先考慮創建一個其他回答者提到的實際服務項目,但請記住這種方法。 在一些情況下,它對我來說措辭不錯。

這取決於代碼當前的編寫方式。 我有幾個WinForm應用程序作為服務加倍,但我已分成另一個程序集的大部分工作。 我對這些應用程序的解決方案通常有3個項目:WinApp,Service和Library(我在這里過於簡化)。

如果您認為您的WinForm應用程序可以提供良好的服務,那么您可能會將代碼置於這樣一種狀態,以至於您可以輕松地將其分離出來。 添加服務項目非常簡單,為它添加安裝程序更具挑戰性,但仍有詳細記錄。 最棘手的部分是為它安裝一個部署包來正確安裝服務,但是再次......只要你知道你需要查找它,它就會被很好地記錄下來。

編輯:只是為了澄清,一般來說我不認為這是一個重大項目。

您可以編寫代碼以使其作為服務運行,但我認為更重要的問題是,它提供了什么? 有一些方法可以最小化托盤的應用程序,您可以在啟動時將所述應用程序啟動到系統托盤。

這是我總是回顧有關執行Windows服務的鏈接。 它是基於WCF的,但我想通過一些修改你可以讓它適合你:

http://support.microsoft.com/kb/317421

至於最小化托盤,這個問題有一個很好的答案:

什么是最小化托盤C#WinForms應用程序的正確方法是什么?

您可以在Windows中使用任務管理器並設置一個任務,該任務將執行您的應用程序的.exe每個Windows啟動。

暫無
暫無

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

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