文章編號: 821794 - 上次校閱: 2007年11月26日 - 版次: 2.7

當您建立 Windows 服務的一些最佳作法的說明

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

本文將告訴您,當您撰寫服務必須避免一些常見錯誤。發行項也建議您建立 Microsoft Windows 服務時,請遵循的最佳作法。一個 Windows 服務 」 程式、 一個常式或執行特定系統功能以支援其他程式特別低層次 (接近於硬體) 的處理程序。 Windows 服務的範例包括如 Microsoft Exchange 與 Microsoft SQL Server 以及其他用戶端應用程式的例如設定電腦時鐘的 Windows 計時器的伺服器產品。當您啟動電腦並沒有使用者介面時,會自動啟動 Windows 服務。

其他相關資訊

當您撰寫 Windows 服務,遵循下列指導方針可能會很有用:
  • 設計您的服務以使用無使用者介面。 服務應用程式執行任何特定的使用者內容之外,並應該不需要任何使用者介入的情況。這些應用程式通常會在背景中執行工作。設計您的服務在沒有使用者介入的情況下執行。
  • 建置互動式服務。以隔離服務沒有使用者介入的情況下執行服務。

    當互動式使用者登入相同的執行個體的 Windows 服務時,視窗訊息攻擊可能會發生。互動式使用者可能會插入,並在互動式服務處理序中執行任意的程式碼。

    如果互動式使用者傳送 WM_COPYDATA 訊息、 惡意程式碼會將複製到高特殊權限的互動式服務處理序位址空間,然後傳送 WM_TIMER 訊息,服務處理序會執行惡意程式碼。此權限提高權限攻擊可能實行透過具有實體電腦的存取權限的使用者,或一個藉由使用 Microsoft 「 終端機服務登入電腦的使用者。
  • 在運送您的服務之前,請移除所有的 Assert 陳述式。Microsoft 建議您不要使用 Assert 方法。Assert 方法顯示對話方塊,以顯示失敗,並再提供您選項偵錯程式碼之程式碼行。之前在運送您的服務,因此,移除所有 Assert 陳述式。
  • 在特定的安全性內容下執行服務。保護您的系統免於遭受攻擊,以最少使用者權限執行服務。如果您需要更多的使用者權限比最少的使用者帳戶授與,不要以系統管理認證的使用者執行服務。

    而且,並不會變更安全性原則,以提升使用者的權限的內建的登入 (系統、 匿名登入、 本機服務及網路服務)。而,建立自訂的帳戶,並再授予使用者權限,可能需要您的服務帳戶。如果您需要的網路認證,使用網域帳戶。如果不需要網路憑證使用本機帳戶。 您可能會花更多的時間建立自訂的帳戶具有受限制的使用者權限,但這是比如果您任一個執行服務使用太多的使用者權限,或當您新增隨附於作業系統的帳戶的使用者權限更安全。
  • 請避免在 Windows 服務中使用列印和映射磁碟機。列印和映射磁碟機都通常可以使用特定使用者或使用者群組。如果您使用的列印或對應磁碟機,請確定您的服務的帳戶執行以使用者權限,他們必須具備存取列印或對應磁碟機。通常,對應磁碟機中斷連線,當您登出,然後重新連線登入電腦時。
  • 避免依賴使用者設定檔設定,當您撰寫 Windows 服務。

?考

如需有關 Windows 服務的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路上的網站:
http://msdn2.microsoft.com/en-us/library/Aa983650(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/Aa983650(VS.71).aspx)

http://msdn2.microsoft.com/en-us/library/aa984074(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa984074(VS.71).aspx)

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
關鍵字:?
kbmt kbvs2005applies kbvs2005swept kbdevsecurity kbserviceprocess kbservice kbserver kbinfo KB821794 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:821794? (http://support.microsoft.com/kb/821794/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。