2012-01-30 80 views
6

如何檢測我在mono-service2下運行? (在C#/。NET 3.5中,在Ubuntu 11上運行單聲道2.6.7)如何檢測我是否在單一服務中運行?

Type.GetType("Mono.Runtime")告訴我我在單聲道運行,所以這部分是好的。但Environment.UserInteractive在單聲道看起來總是錯誤,所以我很難弄清楚我是否真的在mono-service2下運行 - 沒有控制檯/終端。

回答

5

Environment.UserInteractive是正確的解決方案,但不幸的是,它目前沒有在Mono中實現。我可能採取的一看有那麼一天,升級這個答案;)

不過只是來檢測你大概可以使用圍繞這一哈克解決方案:在m參數給mono-service名稱將成爲該服務的應用領域的友好名稱(至少根據mono-servicecurrent source code)。所以,當使用此參數運行,你應該能夠測試:

AppDomain.CurrentDomain.FriendlyName == "NameGivenToMParameter" 

如果這是真的,那麼你的應用程序顯然與單服務(與給定參數)跑了。打印應用程序域名的值到文件,看它是否真的有效(它對我來說);)我不知道它是否真的解決了你的問題。

+0

Tnx。 'FriendlyName'黑客工作正常。但是......這並不理想(所以我把這個問題暫時擱置了一段時間:)。與友好名稱混淆會影響我的日誌記錄,最好不要記住單聲道服務的-m選項。但是,嘿;不管怎麼說,還是要謝謝你。我會找出一些東西。現在我至少有一個解決方案。 – BaBu 2012-01-31 07:54:43

+0

我找到了一種方法來確定是否有一個控制檯/終端可用或不在linux下的單聲道:'Mono.Unix.Native.Syscall.isatty(0)'。這不會在Windows上工作,但當然Environment.UserInteractive的作品。 – BaBu 2012-02-02 10:39:39

+1

@BaBu:是的,好主意。當v4.5可用時,這也會很有用:http://msdn.microsoft.com/en-us/library/system.console.isoutputredirected(v=vs.110).aspx – 2012-02-02 16:10:30

0
if (Environment.OSVersion.Platform.Equals(PlatformID.Unix)) 
{ 
} 
相關問題