如题,具体情况如下:
我做了一个Windows服务,不过遇到了一点问题,大家帮帮忙!
服务设为自动后,开机时服务的确是启动了的,但是没有执行OnStart方法。没有能提供我想要的服务。
但是如果我手动重新启动服务,OnStart方法中的代码就执行了,启动了一个线程来执行我想要的服务。
调试这个问题的时候我在启动的方法里面加了一段代码:
protected override void OnStart(string[] args)
{
//在C盘写入一个文件(代码省略)
}
简单描述一下症状:
服务打包安装后,服务是已启动的,状态也是“自动”。这个时候服务提供的功能是正常的。而且在C盘写入了那个文件。
然后我重新启动电脑,重启完成后,查看服务状态是已启动,但是在C盘没有写入文件,也不能提供我设计的那个服务。
然后通过服务控制,重新启动这个服务,这时候在C盘又写入了那个文件,想要的服务也能提供了。
网上搜到的一些答案大概说是也许开机的时候服务运行所需的一些东西系统还没准备好…
我想问问大家,为什么开机启动的时候我的服务是已启动,但是却没有执行OnStart方法?
不过按照他说的,将wmi服务设置为依存关系仍然无效。
不要写文件,你写系统日志看
我试了,还是跟写文件有同样的问题,开机不会自动记录,如果我手动重启服务就会写日志了。
当然,我没有删除我原来的写文件的逻辑。
稍后我试试仅有记录系统日志的逻辑是否会有问题
仅有记录系统日志的逻辑也不行
@八月神释: 把服务的启动方式“自动” 改为 “自动(延迟启动)”
@小胆粗心: 嗯,改了就可以了。但是像XP这种不支持自动延迟启动的系统还是不行
@小胆粗心: 又试了一下,XP下不稳定,有时能启,有时又就能启。这个比较难办了
服务以什么身份运行,有写文件权限吗。
楼主,推荐您看一下这篇博文,
是关于win ser 生命周期的
有提到这方面的内容
更改一下运行服务的用户试试呢?
把服务的启动方式“自动” 改为 “自动(延迟启动)”
调试-附加到进程,调试一下看