如何判断进程是否由服务控制管理器运行

时间:2009-05-05 21:49:14

标签: windows-services

我有一些用C#编写的Windows服务,我已设置为支持从命令行作为控制台应用程序运行,如果传递了特定参数。效果很好但我希望能够检测应用程序是由服务控制管理员还是从命令行运行。

有没有办法在运行时告诉我的应用程序是否由SCM启动?

3 个答案:

答案 0 :(得分:2)

如果进程在SCM下运行,

Environment.UserInteractive将返回false。

答案 1 :(得分:1)

SCM将调用您的OnStart方法,因此您可以标记该事件并确保从命令行运行时,不要调用OnStart。或者,您可以检查启动参数以查看应用程序的启动方式。

答案 2 :(得分:0)

在C中,函数StartServiceCtrlDispatcher()将失败并显示ERROR_FAILED_SERVICE_CONTROLLER_CONNECT。这是C中最好的方法,想知道C#是否暴露了这一点?

  

ERROR_FAILED_SERVICE_CONTROLLER_CONNECT

     

如果程序作为控制台应用程序而非服务运行,则会返回此错误。如果程序将作为控制台应用程序运行以进行调试,请构造它以便在返回此错误时不会调用特定于服务的代码。