对服务的认识有很多个阶段。
第一阶段:当时还在用c++,知道在一个进程里while(True){},然后里面做很多很多事情,这就叫做服务了,界面可能当时还用Console控制台程序。
第二阶段:知道了服务要在后台执行,一般不会有界面显示,并且开机自启动,于是隐藏Console控制台界面,并且通过使用SC CREATE 将exe变为服务,并且达到开机自启动的目的。这时候还是c++ 阶段。
第三阶段:因项目需求接触c#,发现有个叫项目模板专门制作windows 服务,尝试了下,感觉还不错,省事了许多。通过命令行安装服务。
第四阶段:发现了一个好东西可以制作安装包,省去了敲命令行的痛苦,对实施人员来说肯定是个福音
一,编写windwos 服务
c# 编写windows 服务还算是相当简单的,至少比c++ 要简单。
1,新建项目windows 服务。填写服务名称TestService
创建成功,项目界面是这样的
2,编写服务代码,右键TestService,查看代码 OnStart,编写启动代码 。OnStop编写停止代码
namespace TestService { public partial class TestService : ServiceBase { FileStream fs = null; StreamWriter sw = null; Thread td = null; public TestService() { InitializeComponent(); } protected override void OnStart(string[] args) { td = new Thread(WorkThread); td.Start(); } protected void WorkThread() { fs = new FileStream(@"f://ggg.txt", FileMode.OpenOrCreate, FileAccess.Write); sw = new StreamWriter(fs); while (true) { sw.WriteLine(DateTime.Now.ToString()); sw.Flush(); Thread.Sleep(2000); } } protected override void OnStop() { if(td != null) { td.Abort(); } sw.Close(); fs.Close(); } } }
3,双击TestService.cs,在右边空白处右键添加安装程序 ,会出现这样两个东西,点击serviceInstall1 修改服务的名字,以及启动类型。点击serviceProcessinstall1,改变Account 为LocalSystem.
4,OK 大功告成,一个简单的服务已经完成了。接下来,我们测试该服务是否能够正常跑。右键管理员打开命令提示框,数据 installutil TestService(服务名称) 进行安装服务,顺利的话,会有下面的提示完成的字符。这时会看到F盘忽悠ggg.txt 在写文件。
二、制作安装包,
开始制作安装包,我们不能每次把这个服务拿出去都用命令行去安装,不太友好。右键解决方案,在其他类型点击安装部署,如果发现没有安装,就先去安装这个工具,很简单,VSI_bundle.exe 只有5M大小。
在应用程序文件夹上右键添加项目输出。
右键工程-》视图-》添加自定义操作-》右键添加自定义操作
这个时候,重新编译Setup 工程就会生成setup.exe,该exe 就是我们的服务安装包。到此,整个服务编写打包就已经完成。
good luck