永发信息网

C#判断程序是由Windows服务启动还是用户启动

答案:1  悬赏:10  手机版
解决时间 2021-04-06 13:39
C#判断程序是由Windows服务启动还是用户启动
最佳答案
在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式。在开发程序的时候,我们在Program的Main入口进行判断。最初开始使用Environment.UserInteractive属性,在系统不系统服务的交互模式时,程序运行是正常的,但试过有Win7下,系统允许交互模式,结果在服务启动的时候,跳转到控制台的模式了,服务启动不起来。只能在服务的调用方式下带参数,然后在Main的参数中判断是否为服务方式。这在一般的情况下是可以解决问题的。

后来有好几个项目,使用了开源的Socket框架,框架本身是通过配置来启动服务的,这样,就没有经过用户的Main方法了,启动带参数的方法不行了,如果为了判断启动模式而加单独的配置,不是很好的做法,通过Program加全局标识是可以解决程序自身启动同框架启动的判断,但服务如果是通过自身的Main启动,又只能靠加参数的方法了,整个实现感觉都是有点别扭。

在几次的服务程序开发中,遇到一个写文件的路径问题,即取路径总是不对,通过分析,Windows服务启动时的环境默认路径是从System32目录,可能是Windows服务的宿主程序是从这开始的吧,这就有了解决如何判断启动模式的方法了。主要是通过宿主程序是程序集所在的目录来判断。具体如下


  string curPath = System.Environment.CurrentDirectory;
  string basePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
  bool isRunWinService = (curPath != basePath);

如果两个路径不相同,我就认为是启动Windows服务了。我们只要在程序的开始做判断,这样Environment.CurrentDirectory的路径还是宿主程序,一般来说,开发人员很少去改动Environment.CurrentDirectory的。这样我们做好的Exe程序支持用户启动,服务启动,或框架自动的服务管理等模式了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
肌肉结实怎么减肥瘦身,肌肉型肥胖怎么减肥?
女人转给你13块钱是什么意思
入龙珠有危险吗?
单选题信息经济出现后,在世界各地得到全面发
曹丕为什么杀曹冲,为什么曹丕能在和曹彰.曹植
没有结婚证而同居15年有没有平分财产
阳台壁挂式太阳能真空管和壁挂式哪个好 在线
我在宝龙比亚迪,怎么坐车去南澳或者玫瑰海岸
我从招远坐汽车到北京,汽车会停在北京哪个长
我上星期买来种的两年玫瑰花苗。开始两天发芽
If you' re feeling stressed, rather than w
汽车的岔气大灯一般要多少钱
默契的英语单词是什么
财政预算方案在什么情况下要调整
lol打完之后消失
推荐资讯
大学同学祝福语简短,同学圆锁应该说什么祝福
魔域树心城阿斯特洛在哪
单选题被胆汁促进消化的物质是A.淀粉B.脂肪C.
请教什么是刀背房
vivoxplay5能root吗
股票一手是多少钱,股市中的“一手”是指多少
如何挑选暴力的十间鱼
单选题Becauseoftheheavyfog,theflightto
一屠晚归的晚字用的十分精妙,试简要分析其作
没银行卡,只有现金,能在自助存取款机给别人
中国联通属于国企吗?
跪求一步耽美小说,设定有反应热 受反应热迟
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?