Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在不使用编译指令的情况下检测主应用程序线程是否作为Windows服务运行?_C#_.net_Windows_Windows Services - Fatal编程技术网

C# 是否可以在不使用编译指令的情况下检测主应用程序线程是否作为Windows服务运行?

C# 是否可以在不使用编译指令的情况下检测主应用程序线程是否作为Windows服务运行?,c#,.net,windows,windows-services,C#,.net,Windows,Windows Services,我需要签入包含在共享库中的方法,该库由windows窗体应用程序和windows服务引用 当我们在控制台模式下执行签入时,我必须允许潜在的对话框。对于windows服务,我将改为在事件日志中写入消息 我发现了许多使用编译指令的方法。有没有其他更优雅的方法 谢谢,是的。在运行时,您可以检查进程父进程是services.exe还是当前进程是svchost.exe。或者,您可以使用WinApi查询服务控制管理器服务是否已启动,并且当前进程id是否等于已启动服务的进程id 这个答案有一些C#中的示例代码

我需要签入包含在共享库中的方法,该库由windows窗体应用程序和windows服务引用

当我们在控制台模式下执行签入时,我必须允许潜在的对话框。对于windows服务,我将改为在事件日志中写入消息

我发现了许多使用编译指令的方法。有没有其他更优雅的方法


谢谢,是的。在运行时,您可以检查进程父进程是services.exe还是当前进程是svchost.exe。或者,您可以使用WinApi查询服务控制管理器服务是否已启动,并且当前进程id是否等于已启动服务的进程id

这个答案有一些C#中的示例代码:


您可以检查属性,如果您的应用程序作为windows服务运行,该属性将返回false。

当选中“允许服务与桌面交互”时,该属性是否也将返回false?@Pierre 303:
环境。如果选中“允许服务与桌面交互”,UserInteractive将返回
true
。@Pierre 303。正如0xA3所说,如果服务设置为“允许服务与桌面交互”,Environment.UserInteractive将返回true。如果您需要支持与桌面交互,但仍然限制您的日志显示在UI中,那么您可能应该使用0xA3建议的解决方案。