我有几个用C#编写的Windows Services,如果传递了特定的参数,我可以设置它们以支持从命令行作为控制台应用程序运行。工作很棒,但我希望能够检测到应用程序是由服务控制管理器还是从命令行运行的。
有没有办法在运行时判断我的应用程序是否是由SCM启动的?
发布于 2009-05-05 22:34:22
如果进程在配置管理下运行,则Environment.UserInteractive将返回false。
发布于 2009-05-05 21:56:49
SCM将调用您OnStart方法,因此您可以标记该事件,并确保从命令行运行时不会调用OnStart。或者,您可以检查启动参数以查看应用程序是如何启动的。
发布于 2011-12-01 05:25:11
在C中,由于ERROR_FAILED_SERVICE_CONTROLLER_CONNECT,函数StartServiceCtrlDispatcher()将失败。这是C语言中最好的方法,不知道C#是否公开了这些内容?
ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
如果程序作为控制台应用程序而不是服务运行,则会返回此错误。如果出于调试目的将程序作为控制台应用程序运行,则将其构造为在返回此错误时不调用特定于服务的代码。
https://stackoverflow.com/questions/827067
复制相似问题