首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#/.NET:检测程序是作为服务还是控制台应用程序运行

C#/.NET:检测程序是作为服务还是控制台应用程序运行
EN

Stack Overflow用户
提问于 2008-10-16 09:16:11
回答 8查看 31.2K关注 0票数 27

我有一个C#/.NET程序,既可以作为控制台应用程序运行,也可以作为服务运行。目前,我为它提供了一个命令行选项,以作为控制台应用程序启动,但我希望避免这种情况。

是否可以通过编程方式检测我的程序是否正在作为服务启动?

如果它是纯Win32,我可以尝试使用StartServiceCtrlDispatcher作为服务启动,如果它返回ERROR_FAILED_SERVICE_CONTROLLER_CONNECT,则返回控制台,但如果失败,System.ServiceProcess.ServiceBase.Run()将弹出一个错误对话框,然后返回,而不向程序发出错误信号。

有什么想法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-10-16 09:47:19

拉斯穆斯,this is the earlier question

从答案上看,似乎最流行的方法是使用简单的命令行选项,或者尝试访问try catch块中的Console对象(在Service中,Console不附加到进程,并且尝试访问它会抛出异常)。

或者,如果您在测试/调试服务时遇到问题,可以将代码移动到一个单独的dll程序集中,并创建一个单独的测试工具(winforms/console等)。

(刚刚注意到Jonathan在问题的末尾添加了他的解决方案。)

票数 7
EN

Stack Overflow用户

发布于 2010-02-18 18:39:31

Environment.UserInteractive会施展魔法的。

票数 33
EN

Stack Overflow用户

发布于 2014-10-15 03:04:26

可能需要尝试Process对象的SessionId属性。根据我的经验,如果进程正在运行服务,则将SessionId设置为0。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/207896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档