我有一个C#/ .NET程序,可以作为控制台应用程序和服务运行.目前我给它一个命令行选项来启动作为控制台应用程序,但我想避免这种情况.
是否有可能以编程方式检测我的程序是否作为服务启动?
如果它是纯Win32,我可以尝试使用StartServiceCtrlDispatcher作为服务启动并返回到控制台,如果它返回ERROR_FAILED_SERVICE_CONTROLLER_CONNECT,但System.ServiceProcess.ServiceBase.Run()弹出一个errordialog如果它失败然后只返回没有发出错误信号到该计划.
有任何想法吗?
Environment.UserInteractive将发挥魔力.
拉斯穆斯, 这是早先的问题.
从答案看来,最流行的方法似乎是使用一个简单的命令行选项,或者尝试在try catch块中访问Console对象(在服务中,控制台没有附加到进程并尝试访问它会引发异常) .
或者,如果您在测试/调试服务时遇到问题,请将代码移动到单独的dll程序集中,并创建一个单独的测试工具(winforms/console等).
(刚刚注意到Jonathan在问题的最后添加了他的解决方案.)