第一个任务--C# Windows服务(一)
来公司实习这么久了,感觉也没干什么事,老大就让我做了个图书管理系统,当做学习的小项目,但是我觉得这个实在是很无聊,而且联系不上实际。
终于有一天老大在公司群里谈到上交周报的问题,就说要写一个提醒写周报的服务,让我来做。
听到之后我还是挺高兴的,终于有用到我的时候了,虽然就是个小程序,可能也只是一时兴起。
于是我马上着手研究这个东西,一开始确实有点迷茫,因为我根本不知道啥是Windows服务,怎么去写这个东西。
百度了半天,发现类似“C#创建服务”这种教程还是蛮多的,照着学了一下,大概建起了一个服务,按F5启动调试,咦? 怎么弹了个奇怪的窗口?

原来要先把服务生成EXE,然后用对应的Framework版本目录下的InstallUtil.exe将服务安装到系统里,我的服务是Framework4.0,所以对应的也是Framework 4.0的文件夹下的InstallUtil.exe
生成之后的服务:

对应的InstallUtil.exe路径:

现在要用DOS命令用他们两个文件进行安装服务的操作,打开CMD,注意用管理员权限哦!不然会出现“拒绝访问”的字眼。
安装服务的命令(例子):C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\installutil.exe C:\Users\1\Documents\visual studio 2010\Projects\WeeklyReport\WeeklyReport\bin\Debug\WeeklyReport.exe
卸载服务的命令(例子):C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u C:\Users\1\Documents\visual studio 2010\Projects\WeeklyReport\WeeklyReport\bin\Debug\WeeklyReport.exe
其实就是把两个文件的路径写在了一起,中间用空格隔开,如果是卸载的话中间再加一个“/u”。
下面就可以开始安装服务了,输入安装服务的命令,回车!咦?怎么不对?!

询问同事之后我才知道,要把这个生成之后的服务拷贝到其他目录里,难道是VS对本身路径的文件有隔离?暂且不去管它了,总之我先把它弄出来,于是安装命令变成了:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\Debug\WeeklyReport.exe
恩? 成功了!

右键“我的电脑(Win7以后好像改名叫“计算机”了)”,点击“管理”,找到“服务和应用程序”里的“服务”,看,已经在跑了,我的WeeklyReport!

因为windows服务程序的调试比较麻烦,必须要先安装服务然后在VS的调试菜单中附加到进程才能进行调试,后期如果要改写服务的话又需要不断地卸载和安装,比较麻烦,所以可以打开记事本,把命令写进去,保存成一个bat文件:

“%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0WeeklyReport.exe”中“%SystemRoot%”是系统根目录,而“%~dp0”是自动获取bat文件所在的路径,所以要把这个bat文件和你的服务程序放在同一个目录下,否则肯定会提示找不到程序集的。
这样,需要相应操作的时候只需要以管理员身份运行对应的bat文件就可以了。
现在可以调试了,但是回头一想,我这还是个空的服务,没写东西啊!
下一篇讲讲,如何编写这个小小的Windows服务。
posted on 2014-06-01 15:17 Chump-Monkey 阅读(365) 评论(0) 收藏 举报
浙公网安备 33010602011771号