C# 是否可以在不使用编译指令的情况下检测主应用程序线程是否作为Windows服务运行?
我需要签入包含在共享库中的方法,该库由windows窗体应用程序和windows服务引用 当我们在控制台模式下执行签入时,我必须允许潜在的对话框。对于windows服务,我将改为在事件日志中写入消息 我发现了许多使用编译指令的方法。有没有其他更优雅的方法C# 是否可以在不使用编译指令的情况下检测主应用程序线程是否作为Windows服务运行?,c#,.net,windows,windows-services,C#,.net,Windows,Windows Services,我需要签入包含在共享库中的方法,该库由windows窗体应用程序和windows服务引用 当我们在控制台模式下执行签入时,我必须允许潜在的对话框。对于windows服务,我将改为在事件日志中写入消息 我发现了许多使用编译指令的方法。有没有其他更优雅的方法 谢谢,是的。在运行时,您可以检查进程父进程是services.exe还是当前进程是svchost.exe。或者,您可以使用WinApi查询服务控制管理器服务是否已启动,并且当前进程id是否等于已启动服务的进程id 这个答案有一些C#中的示例代码
谢谢,是的。在运行时,您可以检查进程父进程是services.exe还是当前进程是svchost.exe。或者,您可以使用WinApi查询服务控制管理器服务是否已启动,并且当前进程id是否等于已启动服务的进程id 这个答案有一些C#中的示例代码:
您可以检查属性,如果您的应用程序作为windows服务运行,该属性将返回false。当选中“允许服务与桌面交互”时,该属性是否也将返回false?@Pierre 303:
环境。如果选中“允许服务与桌面交互”,UserInteractive将返回true
。@Pierre 303。正如0xA3所说,如果服务设置为“允许服务与桌面交互”,Environment.UserInteractive将返回true。如果您需要支持与桌面交互,但仍然限制您的日志显示在UI中,那么您可能应该使用0xA3建议的解决方案。