2012-06-07 26 views
0

如何在有人試圖停止Windows服務時提示輸入密碼和用戶?在Windows服務中提示輸入密碼

+9

你爲什麼要這麼做? 但是沒有,沒有直接的方法來做到這一點,因爲Windows服務沒有綁定到Windows GUI。 – Quintium

+1

假設任何具有停止服務所需權限的人都擁有管理控制權並且幾乎可以做任何他們想做的事情。不需要額外的密碼。 –

+1

看看這個:[保護Windows服務不受信任的用戶](http://stackoverflow.com/questions/4266776/protecting-a-windows-service-from-untrusted-users) –

回答

1

通常,沒有理由這樣做。默認情況下,只有管理員可以停止服務,並且如果服務可以完全停止,向管理員請求密碼是沒有意義的:他們是管理員,因此根據定義,他們有權做任何事情。

有意義的一種情況是,如果您希望普通用戶能夠在知道密碼時停止服務。這樣,您可以讓別人停止服務,而無需授予他們對計算機的管理權限。 (即便如此,在大多數情況下,更改服務權限以允許有問題的用戶有權停止該服務會更簡單;但也許,例如,您希望用戶必須打電話給幫助臺以獲得密碼)。

使這項工作的祕訣在於,服務有權在沒有收到操作系統停止請求的情況下出於任何原因自行停止。所以你可以編寫一個用戶可以運行的程序,如果他們想停止服務。該程序接受密碼並通過某種形式的IPC將其發送到服務,例如命名管道。如果密碼正確,則服務停止。

您也可以配置該服務,以便它不接受停止請求,在這種情況下,管理員還需要密碼才能很好地停止該服務。但是這並不能阻止他們停止服務,因爲他們會終止服務流程,或者卸載服務並重新啓動計算機。

2

這是無法完成的。

服務意味着在用戶體驗之外運行,不處理GUI交互。這是操作系統允許或禁止用戶停止服務的原因。

+0

謝謝你的回答。 – AlexandruC

2

它不能直接從服務中完成。但是,如果服務設置爲與桌面交互,則可以由另一個應用程序管理該服務。因此,您可以使用GUI來創建另一個監視服務的應用程序。當服務的「Stopping」事件觸發時,該服務可以在共享狀態文件中設置一些值,並等待監視應用程序在狀態文件中寫入確認值。也許不是你正在尋找的東西,但我認爲你可以得到你想要的結果。

+0

你有這方面的例子嗎?也許一些源代碼? – AlexandruC

+0

我多年前寫了一個程序,做了一些這些東西。我會看看我能否爲你找到它。 –

+0

非常感謝。我會等待。 – AlexandruC