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

时间:2010-08-23 08:31:39

标签: c# .net windows windows-services

我需要检查Windows窗体应用程序和Windows服务引用的共享库中包含的方法。

当我们在控制台模式下进行检查时,我必须允许潜在的对话框。如果是windows服务,我会在事件日志中写消息。

我发现使用编译指令可以做很多方法。是否有一种不同的,更优雅的方法?

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

是的,确实如此。在运行时,您可以检查进程父级是否为services.exe,或者当前进程是否为svchost.exe。或者,您可以使用WinApi查询服务控制管理器,无论您的服务是否已启动且当前进程ID是否等于已启动服务的进程ID。

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

  

How do we tell if a C++ application is launched as a Windows service?