2012-06-04 64 views
1

我創建一個WinForms C#應用程序產卵我們的生產服務器上線和運行的作業。我在winforms應用程序中創建了這些作業,因爲我需要一個GUI來配置和運行這些服務。如何在winforms應用程序下運行Windows服務?

最近,我們改變服務器和一定量的閒置時間後,我註銷和關閉應用程序,所以我需要讓Windows服務,以保持甚至當我退出運行它。問題是我需要GUI。

什麼是創建窗口服務的最佳方式使用GUI界面(因爲我需要他們的時候,我註銷運行)?

+1

[進程間通信](http://stackoverflow.com/questions/56121/ipc-mechanisms-in-c -sharp使用率和最佳實踐)。 –

+0

@ ta.speot.is是正確的,您可能需要將應用程序拆分爲GUI部分和需要在退出時無需GUI才能運行的服務部分。您可以使用進程間通信在這些進程之間進行通信。 – kenny

+0

這樣做的最佳方式是什麼? WCF?有更簡單的解決方案還是第三方軟件可以更快地實現這一點? – Eitan

回答

0

如果你創造出真正的Windows Services

就可以啓動,停止和使用the ServiceController class

編輯

如果從服務需要的數據,你可以使用WCF獲得有關服務信息或者一個Socket來與服務進行通信。另一種選擇是將服務的結果發佈在知名文件夾中的文件中。

0

產卵在用戶會話窗口服務(= Interactive Windows service)是不是一個好主意,並認爲是一個漏洞。我在我的項目中解決了這個問題,把應用程序分成了一個GUI和一個Service部分,就像kenny說的那樣。他們通過WCF進行通信。另一種可能性是Memory-Mapped files

0

如果你想要一個簡單的方法來談談你的過程,你也可以使用NamedPipeServerStreamNamedPipeClientStream。 這種技術是舊的,而不是真正聰明的,但易於使用(如果你知道在C#流管理)和快速。

唯一的缺點是,他們不說話的對象外的開箱。但爲此我使用XML序列化。

  • 在發送側:對象=> XML字符串=>字節[]
  • 在接收器側:字節[] => XML字符串=>對象

爲了簡單起見我總是使用我在接收端解析的String []對象,就像我在應用程序的void main(String [] args)中所做的那樣)

有了服務,您也可以使用CustomCommands,但這隻會要求服務產生沒有給它參數的方法。 除非您將參數存儲在某處(例如:XML文件),您的服務可以訪問它們

相關問題