Tại sao các dịch vụ Windows không thể có GUI?


22

Tôi đã sử dụng tính năng này trong bản phát hành Windows trước đó như XP và NT. Tôi đã có thể chạy GUI từ dịch vụ Windows. Nhưng nó không thể trong các phiên bản sau.

Lý do đằng sau việc loại bỏ tính năng này là gì? Tại sao các dịch vụ Windows không thể có GUI?

Câu trả lời:


47

Chủ yếu là lý do bảo mật.

Theo tôi được biết, khi một dịch vụ cửa sổ tạo điều khiển giao diện như một MessageBox, họ thường chỉ thấy trong phiên giao dịch mà chạy dịch vụ trong ví dụ Session 0 mà cũng sử dụng được người dùng đầu tiên đăng nhập tại địa phương hoặc bởi một ai đó đăng nhập vào sử dụng mstsc / quản trị viên. Do đó người dùng này sẽ thấy các điều khiển này và có thể tương tác với dịch vụ.

Nhưng vì lý do bảo mật, Phiên 0 hiện được bảo lưu và người dùng đầu tiên đăng nhập sẽ được cung cấp một phiên mới và do đó không thấy Điều khiển GUI.

Vì điều này phá vỡ khá nhiều dịch vụ, để tương thích, có một quá trình (xem blog MSDN này) cố gắng phát hiện nếu có bất kỳ tin nhắn nào được hiển thị và cửa sổ bật lên với cảnh báo 'Một chương trình đang chạy trên máy tính này đang cố hiển thị thông báo 'và cho phép bạn xem hoặc bỏ qua tin nhắn.

Microsoft có WhitePaper về chủ đề này mà bạn có thể tải xuống từ đây

Tôi cũng sẽ nghi ngờ rằng một lý do nhỏ khác là vì tính năng này đã bị lạm dụng / hiểu lầm và dẫn đến các thiết kế xấu. Ví dụ: tôi đã từng có một máy chủ cũ với dịch vụ của bên thứ ba hiển thị một số thông báo / lỗi bằng hộp thông báo thay vì ghi vào nhật ký sự kiện. Nhưng tôi không bao giờ đăng nhập cục bộ và hiếm khi đăng nhập ở chế độ quản trị viên và do đó tôi sẽ không thấy các tin nhắn.


1
Tôi có cảm giác nó có liên quan đến UAC - bảo mật điều đó có nghĩa là dấu nhắc UAC không thể chia sẻ phiên làm việc với người dùng tương tác hoặc tin tặc có thể tự giả vờ là dấu nhắc của UAC.
gbjbaanb

23

Các dịch vụ tương tác được sử dụng là có thể , nhưng mô hình dịch vụ là một quá trình chạy độc lập với bất kỳ người dùng nào. Chúng được thiết kế để chạy không giám sát và do đó không cần GUI.

Các dịch vụ tương tác không có sẵn kể từ Windows Vista nên không còn được sử dụng.

Nếu bạn cần tương tác với dịch vụ, trang tôi đã liên kết để khuyên bạn nên tạo một ứng dụng GUI riêng để giao tiếp với dịch vụ thông qua giao tiếp giữa các quá trình (IPC) - ví dụ như các đường ống có tên.


Sở thích của bạn đã lỗi thời: Dịch vụ không thể tương tác trực tiếp với người dùng kể từ Windows Vista. Do đó, các kỹ thuật được đề cập trong phần có tiêu đề Sử dụng dịch vụ tương tác không nên được sử dụng trong mã mới.
nemke 7/10/2015

10

Bởi vì các dịch vụ được cho là chạy trong nền mà không tương tác với người dùng; thực tế họ có thể chạy trong khi không có người dùng nào đăng nhập.


Vậy thì tại sao tính năng này lại có trong các phiên bản trước? Xem xét câu trả lời của bạn, sẽ không có giao tiếp giữa dịch vụ windows và ứng dụng máy tính để bàn. Vì vậy, câu trả lời này không thể thích hợp.
Arun

3
@Arun - dựa trên logic đó, sau đó những thứ bị hỏng sẽ không bao giờ được sửa chữa. Câu trả lời của Michael là chính xác - dịch vụ không nên có guis. Chỉ vì các phiên bản trước của windows có chúng (dịch vụ có guis) không có nghĩa là chúng nên có chúng.

8
@ Không đúng, không có giao tiếp giữa các ứng dụng và dịch vụ trên máy tính để bàn, chỉ đơn thuần là bản thân dịch vụ không có GUI. Thay vào đó, một ứng dụng máy tính để bàn có GUI và giao tiếp với máy chủ.
Paul Hiemstra

Vì vậy, các dịch vụ windows có thể có GUI nhưng họ không nên có chúng?
Arun

1
@Arun, các dịch vụ không có GUI, nhưng thường được kiểm soát bởi các ứng dụng giao diện người dùng riêng biệt có thể kiểm soát dịch vụ bằng cách giao tiếp với nó theo cách nào đó (thông qua các đường ống, ổ cắm có tên, ...)
GrandmasterB

0

Vâng, nó là có thể và nó đã làm việc. Khi bạn đăng nhập, bạn có giao diện của ứng dụng. Nó rất hữu ích cho các ứng dụng cũ không có dịch vụ nhưng vẫn cần chạy trên máy chủ. Mặc dù nó không phải là giải pháp ổn định nhất. Nó đã trở thành hoạt động như người dùng có thể nhấp vào nó hoặc đăng xuất. Điều đó không tốt lắm.

Bây giờ mọi người phát triển dịch vụ bản địa và thêm ứng dụng hoặc nhật ký để quản lý dịch vụ. Đó là một mẫu thiết kế tốt và hiện đang được sử dụng hầu hết thời gian.

Vì vậy, xem nó nhiều hơn là di sản mà nó có thể.


-1

Các dịch vụ này dành cho các hoạt động chưa tham dự, chủ yếu ở chế độ nền. Bản thân dịch vụ tên có nghĩa là hoạt động như một máy chủ cho một số ứng dụng khách hoặc các dịch vụ khác sử dụng dịch vụ này. Vì vậy, MS có thể muốn nắm bắt những điều cơ bản và muốn phân biệt rõ ràng giữa các dịch vụ và Ứng dụng. Vì vậy, các ứng dụng luôn bận rộn và để các dịch vụ phục vụ mục đích của chúng một cách im lặng. Trong khi cắt móng tay là có tại sao đi dao nhà bếp để cắt nils?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.