C# 如何检测I';我在mono服务中运行?
如何检测到我正在mono-service2下运行?(在C#/.NET3.5中,在Ubuntu11上运行Mono2.6.7)C# 如何检测I';我在mono服务中运行?,c#,linux,mono,mono-service,C#,Linux,Mono,Mono Service,如何检测到我正在mono-service2下运行?(在C#/.NET3.5中,在Ubuntu11上运行Mono2.6.7) Type.GetType(“Mono.Runtime”)告诉我我正在Mono中运行,所以这部分是正常的。但是Environment.UserInteractive在mono下似乎总是错误的,所以我很难弄清楚我是否真的在mono-service2下运行-没有控制台/终端。环境。UserInteractive是正确的解决方案,但不幸的是,它目前没有在mono中实现。有一天我可能
Type.GetType(“Mono.Runtime”)
告诉我我正在Mono中运行,所以这部分是正常的。但是Environment.UserInteractive在mono下似乎总是错误的,所以我很难弄清楚我是否真的在mono-service2下运行-没有控制台/终端。环境。UserInteractive
是正确的解决方案,但不幸的是,它目前没有在mono中实现。有一天我可能会看一看,然后升级这个答案;)
然而,仅仅为了检测,您可能会在这一点上使用黑客解决方案:在m
参数中指定给mono服务的名称将成为该服务的应用程序域的友好名称(至少根据mono服务的定义)。因此,当使用此参数运行时,您应该能够测试:
AppDomain.CurrentDomain.FriendlyName == "NameGivenToMParameter"
如果这是真的,那么您的应用程序显然是使用mono服务(使用给定参数)运行的。将应用程序域名的值打印到文件中,看看它是否真的有效(对我来说是有效的);)我不知道这是否真的解决了你的问题。Tnx。“FriendlyName”黑客很好用。但是这并不理想(所以我把这个问题留了一段时间没有回答:)。混淆FriendlyName会影响我的日志记录,最好不要记住mono服务的-m选项。但是嘿;无论如何,谢谢你。我会想办法的。现在我至少有了一个解决方案。我找到了一种方法来确定linux上mono下是否有可用的控制台/终端:“mono.Unix.Native.Syscall.isatty(0)”。这在windows上不起作用,但当然有Environment.UserInteractive。@BaBu:是的,好主意。当v4.5可用时,这也将非常有用:
if (Environment.OSVersion.Platform.Equals(PlatformID.Unix))
{
}