2010-05-07 35 views
18

Bạn có thể hiển thị hộp thông báo (hoặc bất kỳ hình thức thông báo nào) từ dịch vụ cửa sổ không? Không thể làm cho nó hoạt động. Tôi đã sử dụng:Hiển thị hộp thông báo từ Dịch vụ Windows

  global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " + 
       ServiceName + " is now terminating."); 

nhưng nó không hoạt động và chỉ tạo ra lỗi.

Trả lời

19

Không, bạn không thể hiển thị hộp tin nhắn từ một dịch vụ. Nếu bạn muốn báo cáo lỗi, cách tiêu chuẩn để làm điều này là với event log.

Để biết thêm các loại giao diện người dùng "nâng cao" (không chỉ báo cáo lỗi), cách này thường được thực hiện thông qua ứng dụng cửa sổ thông thường mà bạn đặt trong thư mục Khởi động của người dùng (hoặc phím Run trong sổ đăng ký) và nói chuyện với dịch vụ thông qua một số loại cơ chế IPC (.NET remoting, WCF, ổ cắm thông thường, ống được đặt tên, vv).

+0

Ohh .. Tôi đã hy vọng một trình xử lý ngoại lệ chung sẽ thông báo cho người dùng khi có lỗi xảy ra với dịch vụ.Trong một số trường hợp nó sẽ sụp đổ âm thầm và người dùng sẽ không nhận thức được rằng dịch vụ đã bị hỏng. – Jonn

+0

Tôi sử dụng hộp tin nhắn mọi lúc khi cố gỡ lỗi. Đó là một cách nhanh chóng và dễ dàng để tìm ra những vấn đề có thể xảy ra. KHÔNG BAO GIỜ sử dụng một hộp thông báo trong bản phát hành! Luôn sử dụng nhật ký sự kiện khi xây dựng bản phát hành! Để sử dụng một hộp thông báo cho các mục đích gỡ lỗi, chỉ cần thêm tham chiếu System.Windows.Forms vào dự án của bạn. –

+0

Tôi muốn thông báo cho người dùng rằng tôi không thể ghi nhật ký sự kiện. Nhưng phương pháp duy nhất là thông qua đăng nhập một sự kiện? Thật kì cục. – user922020

-2

Không, bạn không thể. Các dịch vụ Windows không có GUI. Nhưng bạn có thể hiển thị một thông báo khay hệ thống nhỏ.

+1

Tôi không nghĩ rằng bạn có thể làm điều này, vì họ không có tương tác với máy tính để bàn. – SqlRyan

+0

Bạn có thể cho tôi xem một ví dụ về điều này không? Tôi chưa xem xét khả năng này. – Jonn

+0

@ Jonn: Tôi chưa tự làm điều này, nhưng điều này có thể giúp bạn: http: //msdn.microsoft.com/en-us/magazine/cc188923.aspx. Sử dụng P/Gọi để nói chuyện với hệ điều hành. Điều quan trọng là bạn không gọi trực tiếp bất kỳ thành phần GUI nào vì Windows Services không thể có GUI theo thiết kế. – Marcel

0

Từ Wikipedia:

Mặc dù thường dịch vụ không có một giao diện người dùng, các nhà phát triển có thể thêm các hình thức và các thành phần giao diện người dùng khác. Trong trường hợp này, "Cho phép dịch vụ tương tác với máy tính để bàn" phải được kiểm tra trên tab Đăng nhập trong hộp thoại Thuộc tính dịch vụ (mặc dù cần chú ý đến phương pháp này vì điều này có thể gây ra rủi ro bảo mật vì bất kỳ người dùng đã đăng nhập nào có thể tương tác với dịch vụ).

Khi bật tùy chọn này, bạn sẽ có thể hiển thị các hộp tin nhắn từ một dịch vụ.

+0

Bạn có thể bật mã đó? – Jonn

+0

@Jonn: Tôi đoán có một số API để thay đổi mã đó, nhưng thường không nên dựa vào tùy chọn này. – Gart

0

Cho phép dịch vụ tương tác với máy tính để bàn sẽ giúp bạn thực hiện việc này từ bảng điều khiển Services.msc.

NHƯNG, đây là một ý tưởng rất tồi. Đặc biệt là nếu bạn quên xóa hộp thư này sau này. Dịch vụ sẽ treo vì bạn sẽ có một hộp thư mà không ai có thể nhấp vào.

-1

OS: XP Bật Chế độ tương tác cho các dịch vụ của Windows

Thủ tục

  1. Mở bảng điều khiển Dịch vụ. Ví dụ: Bắt đầu> Bảng điều khiển> Công cụ quản trị> Dịch vụ.
  2. Chọn dịch vụ Trình kết nối an toàn Cast Iron.
  3. Nhấp chuột phải vào tên dịch vụ và chọn Thuộc tính. Cửa sổ Thuộc tính dịch vụ được hiển thị.
  4. Chọn tab Đăng nhập.
  5. Chọn tài khoản Hệ thống cục bộ và sau đó chọn Cho phép dịch vụ tương tác với máy tính để bàn.
  6. Nhấp vào OK.
  7. Nhấp vào Khởi động lại.
+1

Điều này đã không hoạt động trong hơn 10 năm. Nó không được hỗ trợ trong Windows Vista và sau này. –

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