2012-08-14 144 views
4

我有一個運行在服務器上的Delphi應用程序。這個應用程序對我的數據庫做了一些關鍵性的工作,用於其他應用程序,並在用戶登錄到Windows時執行。這一切都工作正常,但事實證明,服務器的管理員有時重新啓動服務器,並沒有登錄到Windows。服務器停留在Windows登錄中,我的應用程序無法啓動。Windows服務+在系統托盤中運行應用程序

小的研究後,我決定創建一個Windows服務之前,甚至在Windows用戶登錄,開始我的應用程序。但是,我有兩種形式。一種形式顯示我的應用程序正在執行的當前進程,另一種形式顯示其用於配置第一種形式的.ini文件。

我需要做的是創建之前在Windows和登錄後用戶登錄開始我的應用程序的服務,展示我的表格或打開它,但它最小化到系統托盤。

是否可以使用Windows服務這種行爲,並儘量減少我的形式到系統托盤?

+1

最後,你會最終分離DB工作的GUI,下面的[這個問題]的建議之一(HTTP:/ /stackoverflow.com/q/1260181/243614)互相交流。 – 2012-08-14 21:43:36

回答

14

的服務不能顯示在所有在Vista中的用戶界面(包括系統托盤圖標)開始,並且在早期版本的勸阻。在所有版本的Windows中,應將用戶界面分離爲可由登錄用戶運行的非服務應用程序,管理該用戶托盤的系統托盤圖標,並根據需要與後端服務進行通信許多可用的IPC機制(管道,套接字,COM,RPC,WCF等)。

+1

很好的建議!有關Windows服務常見問題的更多信息,請參閱[「Windows服務是否需要GUI?」](http://www.coretechnologies.com/WindowsServices/FAQ.html#GUIServices)。 – CoreTech 2012-08-14 22:26:05

+0

好吧,我已經知道我沒有使用UI服務,我只是想確認。我正在將應用程序分成兩個應用程序。一個作爲服務,另一個作爲一個簡單的配置程序和表單。甚至在用戶登錄Windows之前,服務是否有任何特定的配置?感謝您的答案,它會幫助我很多。 – Daniel 2012-08-15 19:22:57

+0

假設你使用Delphi的'TService'類,它的'StartType'屬性控制何時啓動服務。它默認設置爲'stAuto',這意味着服務將在操作系統啓動時自動啓動。 – 2012-08-15 19:36:46

1

好了,你可以在服務形式,但必須以管理員身份運行,並且必須設置爲一個交互式服務。

我用SVCOM與托盤圖標,並可以最小化到系統托盤中的形式創造好的服務。

看一看這裏:http://www.aldyn.ru/products/index.html

希望這有助於

+2

在Vista或更高版本中並非如此。 – 2012-08-15 06:44:28

+1

SvCom看起來像一個方便的工具,但從技術上說,它不能在Windows服務應用程序中直接使用表單。它仍然生成兩個獨立的應用程序並將它們集成在一起。你可以調整你的答案,提到像這樣的工具可以幫助實現這種連接,而不是說一些實際上不可能的事情(使用新技術)。 – 2012-08-16 00:01:12

相關問題