我有幾個用C#編寫的Windows服務,如果傳遞了特定的參數,我已經設置爲支持從命令行作爲控制檯應用程序運行。工程很好,但我希望能夠檢測到應用程序是由服務控制管理器還是從命令行運行。如何判斷進程是否由服務控制管理器運行
有沒有什麼辦法可以在運行時告訴我的應用程序是否由SCM啓動?
我有幾個用C#編寫的Windows服務,如果傳遞了特定的參數,我已經設置爲支持從命令行作爲控制檯應用程序運行。工程很好,但我希望能夠檢測到應用程序是由服務控制管理器還是從命令行運行。如何判斷進程是否由服務控制管理器運行
有沒有什麼辦法可以在運行時告訴我的應用程序是否由SCM啓動?
Environment.UserInteractive如果進程在SCM下運行,將返回false。
SCM將調用您的OnStart方法,因此您可以標記該事件並確保從命令行運行時不調用OnStart。或者,您可以檢查啓動參數以查看應用程序是如何啓動的。
在C中,功能StartServiceCtrlDispatcher()
將失敗,並顯示ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
。這是C語言中最好的方式,不知道C#是否暴露了這些?
ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
如果程序正在運行作爲控制檯應用程序,而不是作爲一種服務將返回此錯誤。如果程序將作爲控制檯應用程序運行以進行調試,請將其構造爲在返回此錯誤時不調用服務特定的代碼。
只要您未在SCM中啓用'允許服務與桌面交互'選項,就可以很好地工作。對我們的服務不成問題。感謝Guardi! – BrettRobi 2009-05-06 22:56:07