当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C#/.NET:检测程序是作为服务还是作为控制台应用程序运行》经验,为你挑选了2个好方法。

我有一个C#/ .NET程序,可以作为控制台应用程序和服务运行.目前我给它一个命令行选项来启动作为控制台应用程序,但我想避免这种情况.

是否有可能以编程方式检测我的程序是否作为服务启动?

如果它是纯Win32,我可以尝试使用StartServiceCtrlDispatcher作为服务启动并返回到控制台,如果它返回ERROR_FAILED_SERVICE_CONTROLLER_CONNECT,但System.ServiceProcess.ServiceBase.Run()弹出一个errordialog如果它失败然后只返回没有发出错误信号到该计划.

有任何想法吗?



1> 小智..:

Environment.UserInteractive将发挥魔力.


它会停止做魔术,这就是:)
如果服务在Windows XP上运行并且"允许此服务与桌面交互"设置怎么办?

2> Ash..:

拉斯穆斯, 这是早先的问题.

从答案看来,最流行的方法似乎是使用一个简单的命令行选项,或者尝试在try catch块中访问Console对象(在服务中,控制台没有附加到进程并尝试访问它会引发异常) .

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

(刚刚注意到Jonathan在问题的最后添加了他的解决方案.)

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有