2015-02-26 16 views
8

Tôi đang sử dụng Topshelf kết hợp với FluentSchedule cho Dịch vụ Windows.Cách phát hiện nếu Topshelf đang chạy trong chế độ bảng điều khiển

Tuy nhiên, tôi muốn để có thể thử nghiệm-chạy các ứng dụng chỉ đơn giản là khởi động và không thực thi mã FluentSchedule rằng thiết lập bộ đếm thời gian, vv

Có cách nào khi chạy file exe từ Bộ chỉ huy Line (tức là không có lệnh 'install') để kiểm tra từ TopShelf rằng nó đang chạy trong chế độ Console?

+0

Tôi sẽ hỏi trong danh sách gửi thư, https://groups.google.com/forum/#!members/topshelf-discuss, nếu bạn chưa có. Tôi không nghĩ rằng có một cách rõ ràng. Ngoài ra, bạn có thể mở một vấn đề trên GitHub: https://github.com/topshelf/topshelf – Travis

+0

Không liên quan trực tiếp với TopShelf, nhưng có một cái nhìn tại http://stackoverflow.com/questions/2397162/how-to-determine -if-start-inside-a-windows-service –

Trả lời

12

Đó là loại hack, nhưng bạn có thể thử truyền giao diện HostControl tới ConsoleRunHost và nếu đó là loại đó, bạn đang chạy dưới dạng ứng dụng bảng điều khiển.

Nó không lý tưởng, chắc chắn, nhưng chắc chắn bạn có thể ẩn điều này trong một phương pháp mở rộng để làm cho nó ít xấu xí.

public static bool IsRunningAsConsole(this HostControl control) 
{ 
    return control is ConsoleRunHost; 
} 
+2

Tôi gặp khó khăn trong việc xác định những gì và khi nào để tham chiếu như một HostControl khi chạy. Những gì tôi có thể tham khảo trước khi gọi HostFactory.Run (x => vv) mà sẽ là một HostControl? Hay tôi đang làm quá sớm? Tôi có nên kiểm tra điều này trong các lớp dịch vụ tôi instantiating trong x.Service và một lần nữa, những gì tôi có thể tham khảo trong lớp đó sẽ là một HostControl? – Redeemed1

+0

Bạn đang thực hiện quá sớm. HostControl nằm bên trong mã dịch vụ thực tế của bạn. Mã lịch biểu lưu loát mà bạn đề cập không nên được tạo bên ngoài dịch vụ do Topshelf bắt đầu. Nếu không, nó sẽ được bắt đầu để cài đặt, gỡ cài đặt và các lệnh Topshelf khác. –

+0

Ok, cảm ơn @ChrisPatterson, tôi sẽ kiểm tra nó ra – Redeemed1

7

Bạn có thể sử dụng Environment.UserInteractive. Về mặt kỹ thuật, điều này sẽ không hoạt động trong 100% các trường hợp vì có thể chạy một dịch vụ ở chế độ tương tác người dùng, nhưng đây là trường hợp ngoại lệ.

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