2012-05-23 26 views
13

Tôi đã cài đặt tệp jar thực thi chuẩn làm dịch vụ Windows bằng cách chạy lệnh sau:Dịch vụ Windows được cài đặt với Procrun hoạt động ở chế độ // TS, nhưng không bắt đầu như dịch vụ Windows cho biết "đã bắt đầu và sau đó dừng"

> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \ 
    --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \ 
    --StartClass=com.mydomain.MyService 

bây giờ tôi có thể chạy tốt chương trình của tôi trong chế độ điều khiển bằng cách chạy lệnh sau đây (tôi đang sử dụng Java 1.6):

> prunsrv.exe //TS//"My Service" 

Khi tôi cố gắng để bắt đầu dịch vụ thông qua các giao diện tiêu chuẩn dịch vụ Windows , Tôi nhận được thông báo lỗi sau:

Dịch vụ MyService trên Máy tính cục bộ đã bắt đầu và sau đó dừng lại. Một số dịch vụ tự động dừng nếu chúng không được sử dụng bởi các dịch vụ hoặc chương trình khác.

Không có đầu ra trong tệp nhật ký của ứng dụng của tôi khi tôi cố gắng khởi động dịch vụ theo cách này. Cũng không có đầu ra trong sổ ghi sự kiện của Window (Windows 7 64-bit). Tôi có thể làm gì để thử và tìm ra lý do tại sao dịch vụ này sẽ không chạy?

+0

Bạn có đang chạy dịch vụ với tư cách là 'người dùng cục bộ' hay là người dùng quản trị viên không? – checketts

+0

Nó được đặt thành "tài khoản hệ thống cục bộ" mặc định được sử dụng cho các dịch vụ khác. Tôi đã thử các tài khoản khác vô ích. – 11101101b

Trả lời

5

Không sử dụng bất kỳ khoảng trắng nào trong tên dịch vụ!

Sau nhiều giờ thử nghiệm và tách Tomcat và sao chép quá trình khởi động, bản sửa lỗi cho vấn đề của tôi kết thúc là Apache Commons Daemon (Procrun) không hoạt động bình thường khi có khoảng trắng trong tên của Dịch vụ Windows.

Trình cài đặt có vẻ đúng cách và đăng ký dịch vụ với Windows khi có khoảng trống trong tên dịch vụ. Các mục đăng ký Windows thậm chí nhìn chính xác. Dịch vụ thậm chí chạy trong chế độ gỡ lỗi (hay còn gọi là TS hoặc console). Tuy nhiên, khi chạy, như một dịch vụ thực tế được khởi chạy bởi Windows, nó sẽ thất bại nếu dịch vụ được cài đặt với một khoảng trắng trong tên dịch vụ.

Tôi chắc chắn muốn Procrun có một số loại đầu ra nhật ký khi không thành công! Khai thác gỗ tốt có thể làm cho các vấn đề gỡ lỗi như thế này một snap.

tôi cần phải có nhiều từ trong tên dịch vụ của tôi, vì vậy tôi đặt tên dịch vụ của tôi với một từ và đổi tên với "DisplayName" tham số:

> prunsrv.exe //IS//MyService --Install="C:\path-to-prunsrv.exe" --Jvm=auto \ 
    --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \ 
    --StartClass=com.mydomain.MyService --DisplayName="My Service" 
2

tôi muốn cung cấp thêm một số thông tin về những gì '11101101b' đã nói ở trên. (Đây là bài đăng đầu tiên của tôi, vì vậy hãy nhẹ nhàng!)

Tôi đã có thể cài đặt dịch vụ đúng cách bằng dấu cách trong tên dịch vụ bằng cách thay đổi phần // IS // MyService. là những điều sau đây, điều mà tôi nghi ngờ là những gì anh ấy đã làm. (Tôi xin lỗi nếu tôi giả định không chính xác.) Lưu ý rằng dấu ngoặc kép mở ở đầu chuỗi thay vì ở đầu tên dịch vụ.

"// LÀ // Dịch vụ của tôi"

Như là trường hợp cho anh ta, các dịch vụ được cài đặt một cách chính xác và nhìn đúng, nhưng nó sẽ không khởi động. Tôi đã có thể vượt qua điều đó bằng cách thay đổi cài đặt dữ liệu giá trị ImagePath của dịch vụ trong sổ đăng ký để có thay đổi tương tự cho phần // RS // Dịch vụ của tôi của lệnh.Do đó, giá trị registry thay vì có những điều sau đây trong bối cảnh dữ liệu của nó:

"// RS // Dịch vụ của tôi"

Tất cả mọi thứ dường như được làm việc mà không có vấn đề.

+0

Cảm ơn bạn đã theo dõi @Suzanne Điều đó có thể hữu ích. – 11101101b

1

Máy chủ này bắt đầu và dừng vì lý do nhiệm vụ được hoàn thành bởi dịch vụ nên nó sẽ tự động dừng. nếu bạn có một logic chạy dài bên trong nó sẽ không dừng lại.

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