2010-02-10 32 views
1

我正在構建一個Windows服務,該服務根據哪個Windows用戶登錄來執行不同的操作。如果我將服務安裝在一個用戶下,並將其設置爲啓動,則會爲每個用戶運行單獨的實例登錄並繼續運行,即使當前有多個用戶登錄?相同的Windows服務是否按用戶運行?

這是我想要的行爲,但如果這是不可能的,我將不得不另謀計劃。

而且一般情況下,每個用戶登錄會話都像它自己的獨立環境一樣嗎?換句話說,如果我安裝了一個通過命名管道與我的服務交互的驅動程序,那麼當前登錄的用戶驅動程序發送的管道消息也會被其他登錄用戶下運行的其他服務實例接收到(假設他們確實運行不同的實例,如上所述)?還是他們完全獨立的環境與他們自己的驅動程序/內核實例?

回答

1

至少從XP開始,服務只能有一個實例。當然,特權服務可以像其他用戶一樣創建流程,但它們不會是正式的服務。

+0

因此,如果我創建了特權服務,它會在Windows啓動時還是第一個用戶登錄時啓動?當這些用戶登錄後,我是否會爲新用戶啓動一個新流程?在我的驅動程序示例中,我如何知道哪個用戶執行了觸發驅動程序與服務交互的操作?在服務規則他們都會爲我工作得很好,我只需要解決這些細節。 – 2010-02-10 19:15:30

+0

服務有兩種啓動方式。在啓動時,或「手動」。如果你想登錄來觸發它,你需要編寫某種鉤子(可能與GINA有關)來注意登錄並啓動你的服務。 – bmargulies 2010-02-10 19:20:38

+0

所以,請幫助我解決這個問題: 我有一個服務器上運行的Windows服務,它與管理員帳戶(管理員)一起安裝,但它被設置爲以其他Windows帳戶(admin2)開始。 當我使用admin2登錄並停止Windows服務時,根據同一個WS的操作,我發現該服務仍在與另一個帳戶(admin)一起運行。 我如何確保Windows服務只能運行一次? – Glegan 2014-11-03 23:27:50

3

如上所述,Windows服務有一個實例。默認情況下,它作爲本地系統帳戶運行,而不是作爲任何特定用戶(並且它無權訪問單個用戶的環境等)。它不從任何憑據繼承當前登錄的用戶。您可以爲該服務設置特定的用戶憑據(例如通過服務控制管理器),以便像任何給定的用戶一樣運行該服務的一個實例。但你只有一個。