如何检测我是否在单一服务中运行?

问题描述:

如何检测我在mono-service2下运行? (在C#/。NET 3.5中,在Ubuntu 11上运行单声道2.6.7)如何检测我是否在单一服务中运行?

Type.GetType("Mono.Runtime")告诉我我在单声道运行,所以这部分是好的。但Environment.UserInteractive在单声道看起来总是错误,所以我很难弄清楚我是否真的在mono-service2下运行 - 没有控制台/终端。

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

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