如何检测我是否在单一服务中运行?
问题描述:
如何检测我在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-service
的current source code)。所以,当使用此参数运行,你应该能够测试:
AppDomain.CurrentDomain.FriendlyName == "NameGivenToMParameter"
如果这是真的,那么你的应用程序显然与单服务(与给定参数)跑了。打印应用程序域名的值到文件,看它是否真的有效(它对我来说);)我不知道它是否真的解决了你的问题。
答
if (Environment.OSVersion.Platform.Equals(PlatformID.Unix))
{
}
Tnx。 'FriendlyName'黑客工作正常。但是......这并不理想(所以我把这个问题暂时搁置了一段时间:)。与友好名称混淆会影响我的日志记录,最好不要记住单声道服务的-m选项。但是,嘿;不管怎么说,还是要谢谢你。我会找出一些东西。现在我至少有一个解决方案。 – BaBu 2012-01-31 07:54:43
我找到了一种方法来确定是否有一个控制台/终端可用或不在linux下的单声道:'Mono.Unix.Native.Syscall.isatty(0)'。这不会在Windows上工作,但当然Environment.UserInteractive的作品。 – BaBu 2012-02-02 10:39:39
@BaBu:是的,好主意。当v4.5可用时,这也会很有用:http://msdn.microsoft.com/en-us/library/system.console.isoutputredirected(v=vs.110).aspx – 2012-02-02 16:10:30