2012-01-30 6 views
6

mono-service2에서 어떻게 작동합니까? (C#/.NET 3.5에서는 우분투 11에서 모노 2.6.7을 실행 중임)모노 서비스로 실행 중인지 확인하는 방법은 무엇입니까?

Type.GetType("Mono.Runtime")은 제가 모노로 실행 중이므로 그 부분이 ok입니다. 하지만 Environment.UserInteractive은 모노에서 항상 거짓 인 것처럼 보이기 때문에 콘솔/터미널없이 실제로 mono-service2에서 실행 중인지 알아 내려고 애 쓰고 있습니다.

답변

5

Environment.UserInteractive은 적절한 해결책이지만 불행히도 현재 Mono에서는 구현되지 않았습니다. 해당 서비스의 응용 프로그램 도메인의 친숙한 이름이 될 것이다 m 매개 변수에 mono-service에 주어진 이름 : 당신은 아마 이것의 주위에 해키 솔루션을 사용할 수 있습니다 감지하지만

) 나는 그것에보고 언젠가 받아이 대답을 업그레이드 할 수 있습니다 (적어도 에 따라). 이 매개 변수를 사용하여 실행할 때, 당신은 테스트 할 수 있어야한다 :

AppDomain.CurrentDomain.FriendlyName == "NameGivenToMParameter" 

를 그 다음 응용 프로그램이 분명히 (주어진 매개 변수) 모노 서비스로 실행됩니다, 사실이라면. 응용 프로그램 도메인 이름의 값을 파일에 인쇄하여 실제로 작동하는지 확인하십시오 (나에게 도움이됩니다;). 실제로 문제가 해결되는지는 잘 모르겠습니다.

+0

TNX. 'FriendlyName'해킹이 잘 작동합니다. 그러나 ... 그것은 이상적이지 않습니다 (그래서 나는이 질문을 조금 더 오랫동안 대답하지 않은 상태로 두었습니다). FriendlyName에 문제가 생기면 로깅에 영향을 미치므로 모노 서비스에 -m 옵션을 기억하지 않아도됩니다. 그러나 헤이; 어쨌든 고마워. 나는 뭔가를 알아낼 것이다. 그리고 지금은 적어도 해결책을 찾았습니다. – BaBu

+0

리눅스에서 모노 또는 모노가 있는지 여부를 알아내는 방법을 찾았습니다 : 'Mono.Unix.Native.Syscall.isatty (0)'. 이것은 Windows에서는 작동하지 않지만 물론 Environment.UserInteractive가 작동합니다. – BaBu

+1

@BaBu : 그래, 좋은 생각이야. v4.5가 사용 가능할 때도 유용 할 것입니다 : http://msdn.microsoft.com/en-us/library/system.console.isoutputredirected(v=vs.110).aspx –

0
if (Environment.OSVersion.Platform.Equals(PlatformID.Unix)) 
{ 
} 
관련 문제