2010-04-16 42 views

Trả lời

34

Dịch vụ chạy trong một cửa sổ khác với người dùng đã đăng nhập, do đó bạn không thể có biểu tượng khay hệ thống cho họ. Từ https://docs.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications:

Ứng dụng Windows Service chạy trong một cửa sổ khác với trạm tương tác của người dùng đã đăng nhập. Một cửa sổ là một đối tượng an toàn có chứa một Clipboard, một tập hợp các nguyên tử toàn cầu và một nhóm các đối tượng máy tính để bàn. Vì trạm của dịch vụ Windows không phải là một trạm tương tác, các hộp thoại được nâng lên từ bên trong ứng dụng dịch vụ Windows sẽ không được nhìn thấy và có thể khiến chương trình của bạn ngừng phản hồi. Tương tự, các thông báo lỗi phải được ghi vào nhật ký sự kiện Windows thay vì được nâng lên trong giao diện người dùng.

Các lớp dịch vụ Windows được NET Framework hỗ trợ không hỗ trợ tương tác với các trạm tương tác, tức là người dùng đã đăng nhập. .NET Framework cũng không bao gồm các lớp đại diện cho các trạm và máy tính để bàn. Nếu dịch vụ Windows của bạn phải tương tác với các trạm khác, bạn sẽ cần phải truy cập vào Windows API không được quản lý. Để biết thêm thông tin, hãy xem tài liệu Windows SDK.

Tương tác của dịch vụ Windows với người dùng hoặc các trạm khác phải được thiết kế cẩn thận để bao gồm các tình huống như không có người dùng đăng nhập hoặc người dùng có bộ đối tượng máy tính để bàn không mong muốn. Trong một số trường hợp, có thể thích hợp hơn khi viết một ứng dụng Windows chạy dưới sự kiểm soát của người dùng.

Dưới đây là một số liên kết về cách ghi vào khay hệ thống. Bạn sẽ cần một ứng dụng khác để giao tiếp với dịch vụ, vì dịch vụ không thể trực tiếp có biểu tượng trong khay hệ thống.

How can I make a .NET Windows Forms application that only runs in the System Tray?

http://msdotnetsupport.blogspot.com/2008/02/cnet-application-windows-system-tray.html

9

Bạn không thể, không trực tiếp, vì dịch vụ cửa sổ sẽ nhất thiết bắt đầu khi máy hoạt động, không phải khi người dùng đăng nhập. Dịch vụ cũng sẽ chạy trong ngữ cảnh khác, có thể là người dùng khác.

Điều bạn có thể làm là viết một "bộ điều khiển" dựa trên khay hệ thống riêng biệt tương tác với dịch vụ.

Các vấn đề liên quan