2010-01-05 25 views
5

Tôi gặp sự cố mà tôi không thể tìm ra liên quan đến Dịch vụ Windows mà tôi đã viết bằng C#. Những gì tôi đang cố gắng làm là chờ một khoảng thời gian nhất định cho một tiến trình con chấm dứt trước khi tôi buộc phải giết nó và ngừng dịch vụ. Tôi đã đặt thời gian chờ của mình từ 5 đến 15 giây và dịch vụ của tôi chờ khoảng thời gian thích hợp và sau đó giết chết đứa trẻ và dừng lại khi tôi dừng nó qua cửa sổ dịch vụ mmc. Tuy nhiên nếu tôi tắt máy tính, dịch vụ của tôi bị thổi bay đi trước khi nó có thể đợi và dừng lại đúng cách. Tôi đã đọc rằng Windows cho phép một thời gian chờ 30 giây cho một dịch vụ để tắt máy trước khi nó thổi nó đi. Mã của tôi đang thực thi trong thời gian ít hơn 30 giây, tối đa là khoảng 20 giây hoặc lâu hơn, tùy thuộc vào những gì tôi đặt thời gian chờ tại.Buộc các cửa sổ phải chờ một dịch vụ dừng khi tắt máy

Tôi đã thử sử dụng hàm SetServiceStatus() trong win32 Api nhưng nó không thay đổi chức năng của mã. Tôi đã xác minh rằng cuộc gọi hàm đang thành công. Có cách nào khác để buộc Windows phải đợi dịch vụ của tôi tắt máy đúng cách không? Tôi đang thử nghiệm nó trong Windows 7 x86, và Windows Vista Sp1 x86.

Trả lời

2

Windows sẽ không cho phép bất kỳ dịch vụ nào ngăn chặn tắt máy, đây là theo thiết kế. như Gyuri nói, bạn phải xem xét một thiết kế khác cho ứng dụng của bạn.

+0

+1: * Rõ ràng * giải pháp ở đây là làm cho dịch vụ mất ít thời gian hơn để dừng lại. Soooo nhiều ứng dụng bỏ qua tầm quan trọng của điều này và. –

0

OnSTart và OnSTop được kế thừa từ một lớp cơ sở mà khá nhiều cho bạn. Tất cả các triển khai của bạn về những phương pháp này nên làm là bắt đầu hoặc dừng mã khách hàng của bạn, cửa sổ sẽ làm phần còn lại.

Tôi sẽ báo trước điều này với thực tế là tôi sử dụng C# và triển khai ServiceBase của .Net thực hiện điều này, tôi không thể nói một cách hữu hiệu về mã C/C++ hoặc API.

1

Đây là cài đặt Windows chung, rõ ràng: http://support.microsoft.com/kb/305788. Tôi sẽ lo lắng nếu tôi phải dựa vào người dùng để dịch vụ của tôi tắt. Thay vào đó, tôi sẽ lưu dữ liệu của mình.

+0

Điều này thật tệ. Tôi có một dịch vụ Windows lưu trữ các máy ảo cần thời gian để tắt máy. Tôi không muốn nó chờ đợi một cách vô hạn, nhưng thời gian chờ lâu hơn (ít hơn một phút) sẽ đảm bảo máy của tôi được tắt đúng cách. – Jens

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