2012-01-30 34 views
6

Làm cách nào để phát hiện tôi đang chạy dưới chế độ mono-service2? (trong C# /. NET 3.5, chạy mono 2.6.7 trên ubuntu 11)Làm thế nào để phát hiện nếu tôi đang chạy trong dịch vụ đơn?

Type.GetType("Mono.Runtime") cho tôi biết tôi đang chạy đơn, vì vậy phần đó là ok. Nhưng Environment.UserInteractive luôn luôn là sai theo mono có vẻ như vậy, vì vậy tôi đang đấu tranh để tìm ra nếu tôi thực sự chạy dưới mono-service2 - không có console/thiết bị đầu cuối.

Trả lời

5

Environment.UserInteractive là giải pháp thích hợp nhưng, thật không may, nó hiện không được triển khai trong Mono. Tôi có thể có một cái nhìn vào nó một ngày nào đó, nâng cấp câu trả lời này;)

Tuy nhiên chỉ để phát hiện có lẽ bạn có thể sử dụng giải pháp hacky xung quanh này một: tên được đặt cho mono-service trong m tham số sẽ trở thành tên gọi thân thiện của miền ứng dụng của dịch vụ đó (ít nhất là theo số current source code của mono-service). Vì vậy, khi chạy với thông số này, bạn sẽ có thể kiểm tra:

AppDomain.CurrentDomain.FriendlyName == "NameGivenToMParameter" 

Nếu đúng, khi đó ứng dụng của bạn rõ ràng là chạy với dịch vụ đơn (có thông số đã cho). In giá trị của tên miền ứng dụng để tập tin để xem nếu nó thực sự hoạt động (nó cho tôi);) Tôi không biết nếu nó thực sự giải quyết vấn đề của bạn.

+0

Tnx. Các 'FriendlyName' hack hoạt động tốt. Nhưng ... Nó không lý tưởng (vì vậy tôi để lại câu hỏi này chưa được trả lời trong một thời gian dài :). Lộn xộn với FriendlyName ảnh hưởng đến việc ghi nhật ký của tôi và sẽ tốt hơn nếu bạn không phải nhớ tùy chọn -m cho dịch vụ đơn nhất. Nhưng hey; dù sao cũng cảm ơn bạn. Tôi sẽ tìm ra thứ gì đó. Và bây giờ tôi ít nhất là _have_ một giải pháp. – BaBu

+0

Tôi tìm thấy một cách để tìm hiểu xem có một giao diện điều khiển/thiết bị đầu cuối có sẵn hoặc không theo mono trên linux: 'Mono.Unix.Native.Syscall.isatty (0)'. Điều này sẽ không hoạt động trên các cửa sổ nhưng tất nhiên có các công trình Environment.UserInteractive. – BaBu

+1

@BaBu: vâng, ý tưởng hay. khi v4.5 có sẵn, điều này cũng sẽ hữu ích: http://msdn.microsoft.com/en-us/library/system.console.isoutputredirected(v=vs.110).aspx –

0
if (Environment.OSVersion.Platform.Equals(PlatformID.Unix)) 
{ 
} 
Các vấn đề liên quan