2012-05-02 36 views
5

Tôi có một dự án Dịch vụ Windows đơn giản. Tôi đã làm theo hướng dẫn tại số http://msdn.microsoft.com/en-us/library/zt39148a.aspx bao gồm thêm hành động tùy chỉnh.Dịch vụ Windows Trong Trình lập lịch tác vụ - Không thể khởi động dịch vụ. Quy trình dịch vụ không thể kết nối với bộ điều khiển dịch vụ

Khi chạy bản dựng của tôi ở Chế độ phát hành cho dự án thiết lập. Tôi chạy .msi trên máy chủ mà tôi muốn cho dịch vụ chạy. Khi tôi mở Trình quản lý dịch vụ, dịch vụ sẽ xuất hiện. Tôi thậm chí có thể tự khởi động dịch vụ và nó chạy chính xác như tôi cần.

Tuy nhiên, tôi muốn dịch vụ này chạy cứ 5 phút một lần, vì vậy tôi thiết lập một tác vụ trong Task Scheduler và trỏ dịch vụ .exe của cửa sổ của tôi đến nhiệm vụ. Tuy nhiên, khi công cụ lập lịch tác vụ chạy dịch vụ cửa sổ của tôi, tôi nhận được lỗi sau:

Không thể khởi động dịch vụ. Quy trình dịch vụ không thể kết nối với bộ điều khiển dịch vụ

Tôi đã thực hiện rất nhiều nghiên cứu về điều này nhưng chưa đưa ra bất kỳ điều gì. Có ai có bất kỳ ý tưởng về những gì có thể gây ra điều này?

+0

Chính xác bạn đang đặt gì vào Trình lập lịch tác vụ để bắt đầu dịch vụ của mình? – CoreTech

+0

Trong tab Chung, tôi nhấp vào "Chạy xem người dùng có đăng nhập hay không" và sau đó chọn hộp có nội dung "Không lưu trữ mật khẩu". Trong tab trình kích hoạt, tôi đặt nó chạy 5 phút một lần Trong tab tác vụ, tôi đã bắt đầu Chương trình được chọn và đặt trực tiếp vào tệp .exe – vcuankit

+0

Vì bạn đã hoàn thành và bắt đầu dịch vụ của mình, nên ' t tốt hơn là bạn sử dụng Bộ hẹn giờ trong dịch vụ của bạn so với TaskScheduler? Bạn thậm chí có thể thiết lập một giá trị đăng ký mà bạn có thể đọc và sử dụng như một khoảng thời gian có thể được thay đổi động. Nếu có bất kỳ nhật ký nào bạn muốn, bạn có thể thêm nó vào trình xem sự kiện. –

Trả lời

2

OK, điều đó sẽ không hoạt động. Bạn không thể chạy exe của dịch vụ trực tiếp như thế từ Task Scheduler. Bạn nên use the "Net start" command để bắt đầu dịch vụ.

Đảm bảo chọn hộp "Chạy với đặc quyền cao nhất" trong tác vụ đã lên lịch của bạn để tránh UAC nếu bạn sử dụng Windows Vista trở lên.

+0

Cảm ơn bạn đã phản hồi, CoreTech. Bạn có thể vui lòng xây dựng một chút? Tôi nên đặt lệnh NET START trong bộ lập lịch tác vụ ở đâu? Hoặc tôi chỉ nên bắt đầu dịch vụ và nếu tôi mới bắt đầu dịch vụ thì tôi nên đặt gì trong tab Tác vụ? – vcuankit

+0

Trên tab Hành động, thêm hành động mới vào "Bắt đầu chương trình" và nhập "net start [your-service-name]" vào trường "Program/script". – CoreTech

+0

Khi tôi làm điều đó, nó cho tôi một cảnh báo hỏi xem tôi có đang sử dụng các tham số hay không. Tôi bấm NO và cố chạy nó. Kết quả chạy cuối cùng cho biết "Hệ thống không thể tìm thấy tệp được chỉ định". – vcuankit

1

Câu trả lời của tôi đã không định dạng đúng trong nhận xét vì vậy tôi muốn cho mọi người biết trong trường hợp họ gặp phải vấn đề này. Về cơ bản, tôi vừa tạo ra một tập tin .bat rồi trong đó tập tin .bat, tôi đặt hai dòng sau:

NET START MyServiceName
NET STOP MyServiceName

Lệnh DỪNG NET là đồng bộ và sẽ đợi dịch vụ hoàn thành trước khi ngừng dịch vụ.

Cảm ơn sự giúp đỡ!

+0

Các dịch vụ Windows thường được thiết kế để chạy mọi lúc.Nếu bạn muốn chạy một cái gì đó sau mỗi 5 phút thì hãy viết một ứng dụng console cũ và sử dụng task scheduler để chạy nó sau 5 phút, hoặc viết một dịch vụ chạy mọi lúc và sử dụng lệnh timer hoặc sleep để đánh thức sau mỗi 5 phút . bắt đầu một dịch vụ cứ 5 phút một lần để thực hiện một nhiệm vụ cụ thể và sau đó dừng lại nó không thực sự là một thiết kế tốt – Andy

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