繁体   English   中英

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

[英]Is it possible to detect if the main application thread is running as a Windows Service without using a compilation directive?

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

在控制台模式下进行检查时,我必须允许潜在的对话框。 如果使用Windows服务,我将在事件日志中写入消息。

我发现了使用编译指令来执行此操作的多种方法。 有另外一种更优雅的方法吗?

谢谢

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

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

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

我们如何确定C ++应用程序是否作为Windows服务启动?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM