2010-01-24 75 views

回答

43

一旦計算機啓動,Windows服務將始終運行(只要它已經這樣配置)。標準EXE只在用戶登錄時運行,如果用戶註銷,將會停止。

你會使用的東西,總是需要甚至可以運行,如果沒有人登錄的窗口服務。

你可以使用一個標準EXE了,雖然登錄的用戶運行的程序。

2

一服務是(通常)是沒有UI的標準exe。即使沒有用戶登錄到計算機,它也可以運行,並且它的訪問權限和文件系統視圖不依賴於用戶登錄的內容。

+1

不是100%準確。服務必須滿足一些額外的要求,而不是沒有UI的標準exe。 – 2010-01-24 04:23:41

+0

是的一些要求,以及它可以訪問的不同API,但仍然是標準的EXE。 – 2010-01-24 04:24:49

+0

SQL Server代理服務不具有交通燈界面嗎?如果我沒有弄錯,那是一項服務嗎? – LearningCSharp 2010-01-24 05:22:01

31

Windows服務具有特殊的ServiceMain函數,並且必須響應服務控制管理器(SCM)命令正確,以便作爲服務發揮功能。另一方面,常規可執行文件具有mainWinMain函數,並且不需要響應任何特定的控制命令。

+5

技術上正確,但我認爲它不會很好地回答這個問題。 (見Eric J的回答)。 – Ash 2010-01-24 05:11:00

+0

格雷格和埃裏克的答案有效,但我只能將其中一個標記爲正確:-( – LearningCSharp 2010-01-24 05:20:10

+1

我絕對認爲這是一個比所選擇的更正確的答案,另一個答案更好地回答了「什麼是Windows服務」的問題。 – 2013-04-07 04:03:25

12

如果你在談論實現後臺操作,這裏的標準是我建議選擇一個服務或一個窗口少的.exe:

選擇一個exe文件,如果:

  • 你需要它運行在每個用戶的基礎上,只有當用戶登錄
  • 你需要它來與Windows桌面(通知圖標等)進行交互
  • 它需要所有日誌記錄的特權,在用戶(不多,不少於)

選擇一個服務,如果:

  • 它可能需要運行時沒有人在
  • 記錄它一般不需要每用戶數據或特權
  • 它僅與通信網絡
  • 它需要公開新的「安全」對象。具有自己的聲明性訪問控制列表(DACL)的對象限制對某些帳戶/組的訪問。
  • 它需要特殊的權限,可能對登錄用戶不可用。

服務能夠輕鬆安全漏洞,所以喜歡的.exe對服務。有時你會需要兩個。病毒檢查程序需要能夠訪問文件系統上的每個文件(當前用戶可能無法做到這一點),但它還需要以通知對話框/彈出窗口和工具的形式向用戶提供信息任務欄圖標。服務不能直接與用戶的GUI交互。他們可以使用標準的Windows IPC(進程間通信)服務,例如管道和共享內存區域。這些工具通常具有服務和每個用戶的無窗口.exe,該服務使用Windows管道或共享內存區域與服務進行通信。

得到「編程Windows安全」基思·布朗,如果你想潛入這些話題。

+0

Minor nit:DACL中的D代表Discretionary – 2010-01-24 04:58:01

+0

「它只與網絡通信」,這是不正確的,服務可以做很多其他事情而不是網絡訪問 – Ash 2010-01-24 05:04:14

+1

並非所有的Win32/64服務都只與網絡通信,但所有隻需要與網絡進行通信的守護進程在Win32/64上進行編程時幾乎都可以最好地實現爲服務。我希望列表描述服務有意義的場景,而不是限制Windows服務的每個用例。 – 2010-01-24 06:20:05

1

從EXE Binary的角度來看,從編譯器的C庫的角度來看,Windows服務看起來就像一個標準的Unix程序或Windows控制檯程序。即與main()切入點。使服務不同的是Microsoft Windows(從註冊表通常在啓動時)加載/調用它的方式。服務可以(也應該)通過Windows API調用告訴SC.exe應用程序[服務控制管理器],服務啓動,停止,暫停等。

相關問題