c# 编写windows 服务,并制作安装包

  对服务的认识有很多个阶段。

  第一阶段:当时还在用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 

原文地址:https://www.cnblogs.com/techdreaming/p/7820026.html