细数c#Windows服务定时启动另一程序的一二坑

本文没有代码,但有代码连接,如需要看代码的同学,请进门直走,谢谢!!

       前段时间公司要求我写一个程序用于检测公司的产品测试数据是否有漏,并定时启动它。在网上看了下资料,完成定时启动的大概有两种方式:第一种方式、在程序中加一个Timer计时器,定时启动你编写的方法,执行你想要的结果;这种方法的优点是定时功能和你想要的执行功能在同一程序中,不需另写程序启用它,缺点是需要一直打开程序,增加了人为误操作的可能。第二种方式:将定时启动程序放在Windows服务中,定时启动被执行程序。优点:不用一直开着程序,定时启动程序隐藏在Windows服务中,大大减少人为误操作的可能。缺点:需要另写程序了。为了避免人为的误操作我选择了第二种方案。

在网站找了一大堆解决方案,我照着 点击打开链接三五下就写好了一个Windows 服务,接着就是服务安装点击打开链接。一切都顺风顺水,几十行代码写就一个Windows服务,惊喜不惊喜,意外不以为,妈妈再也不用担心我写代码了。接下来就是见证奇迹的时刻,服务安装成功,接下来就是等待Windows服务挑动我的程序了。诶?设置的时间不是到了吗,怎么还是这么静悄悄?难道是我的程序有问题?我手动启动程序,很正常啊。莫非是windows 服务没有执行那段启动程序的代码?我开始调试服务点击打开链接(卸载服务,改代码里的执行时间,重新生成解决方案,安装,启动服务,调试把服务添加到进程,设置断点,等待时间到达)process 启动程序代码被执行过,为什么还是不行?难道是我process start 的代码有问题,把代码复制到一个新项目里,执行。没有问题啊,程序正常启动啊。。。。纠结痛苦了好久,突然灵光一闪,我启动被执行程序和服务启动被执行程序的唯一区别是登录的用户不同。我登录用的是User,而服务里面登录用的是local system。在我被启动的程序里面,是要访问公共盘的,user 是有账号和密码的,而local system 是没有权限的,于是我切换服务的用户,将其改为user,卸载服务,重新生成解决方案,安装,开启服务,并在被启动程序里写几个log输出到c盘txt文档。再次运行,发现程序已经运行,但是又出现了一个异常。异常来自 HRESULT:0x800A03EC,What fuuuuuuuuuuuuuuck!这是什么鬼,为什么我手动启动么有问题,已添加到服务就出现问题。好吧,我待代码如初恋,又找问题原因。因为有了上一次的教训,我判断这次出现问题的原因可能也是权限的原因,但是为什么Excel也来捉弄我?我查看了Excel的权限设置,三个用户(local system,Administrator,user)都是完全控制,为什么服务不可以?我终于找到了一种方案点击打开链接,按着在服务里的用户设置启动用户权限。再次启动服务运行程序.OK!凡是打不败你的,终将让你强大。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值