簡體   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