2012-01-30 6 views
6

Jak wykryć, że uruchamiam w trybie mono-service2? (w C#/.NET 3.5, z uruchomionym mono 2.6.7 na ubuntu 11)Jak wykryć, czy korzystam z usługi mono-service?

Type.GetType("Mono.Runtime") mówi mi, że pracuję w trybie mono, więc ta część jest w porządku. Ale wydaje się, że Environment.UserInteractive jest zawsze fałszywe w trybie mono, więc staram się dowiedzieć, czy faktycznie pracuję pod kontrolą mono-service2 - bez konsoli/terminala.

Odpowiedz

5

Environment.UserInteractive jest właściwym rozwiązaniem, ale niestety obecnie nie jest zaimplementowane w Mono. Mogę to kiedyś obejrzeć i uaktualnić tę odpowiedź;)

Jednak tylko w celu wykrycia możesz prawdopodobnie użyć hacky w pobliżu tego: nazwa nadana mono-service w m parametr stanie się przyjazną nazwą domeny aplikacji tej usługi (co najmniej zgodnie z current source code z mono-service). Tak więc, gdy uruchamiane za pomocą tego parametru powinna być w stanie testu:

AppDomain.CurrentDomain.FriendlyName == "NameGivenToMParameter" 

Jeśli to prawda, to aplikacja jest widocznie biegł z mono-service (z danego parametru). Wydrukuj wartość nazwy domeny aplikacji do pliku, aby sprawdzić, czy to naprawdę działa (robi to dla mnie);) Nie wiem, czy to naprawdę rozwiązuje twój problem.

+0

Tnx. Hack "FriendlyName" działa dobrze. Ale ... To nie jest idealne (więc pozostawiam to pytanie bez odpowiedzi przez jakiś czas). Wiadomości z FriendlyName wpływają na moje logowanie i lepiej byłoby nie pamiętać opcji -m do mono-service. Ale hej; dzięki i tak. Coś wymyślę. A teraz przynajmniej mam rozwiązanie. – BaBu

+0

Znalazłem sposób, aby dowiedzieć się, czy jest dostępna konsola/terminal pod mono na Linux: "Mono.Unix.Native.Syscall.isatty (0)". To nie zadziała w Windows, ale oczywiście działa Environment.UserInteractive. – BaBu

+1

@BaBu: tak, dobry pomysł. gdy dostępny jest v4.5, będzie również użyteczny: http://msdn.microsoft.com/en-us/library/system.console.isoutputredirected(v=vs.110).aspx –

0
if (Environment.OSVersion.Platform.Equals(PlatformID.Unix)) 
{ 
}