聊聊.Net如何实现Windows服务

发表于:2021-7-15 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:conan5566    来源:UP技术控

  Topshelf 是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
  使用Topshelf可以非常方便的将一个C#控制台程序部署成为一个Windows Service,使用它可以很方便的构建跨平台服务寄主,而在调试时直接以控制台的形式运行即可,非常方便。
  TopShelf 安装不需要依赖 .net framework 框架中的 InstallUtil.exe 工具。
  static void Main(string[] args) 
          { 
   
   
              HostFactory.Run(x => 
              { 
                  x.UseAssemblyInfoForServiceInfo(); 
                  x.Service<WriteTxtClass>(w => 
                  { 
                      w.ConstructUsing(name => new WriteTxtClass());  //使用 WriteTxtClass实体 
                      w.WhenStarted(tc => tc.WriteTxtStart());   //开始服务触发 WriteTxtStart 函数 
                      w.WhenStopped(tc => tc.WriteTxtStop());    //结束服务触发 WriteTxtStop 函数 
                  }); 
   
   
                  x.SetServiceName("TopShelfService1"); //服务名 
                  x.SetDisplayName("TopShelfService1");//服务显示名称 
                  x.SetInstanceName("TopShelfService1"); //服务显示名称后面的描叙 
                  x.SetDescription("TopShelfService1 is Test Services"); // 服务描叙 
                  x.RunAsLocalSystem(); 
                  x.StartAutomatically(); 
   
   
              }); 
          } 
   
      public class WriteTxtClass 
      { 
          public void WriteTxtStart() 
          { 
              string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt"; 
              if (!File.Exists(filePath)) 
              { 
                  FileStream stream = new FileStream(filePath, FileMode.Create); 
                  StreamWriter writer = new StreamWriter(stream, Encoding.Default); 
                  writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行 
                  writer.Close();//释放内存 
                  stream.Close();//释放内存 
              } 
              else 
              { 
                  FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖 
                  StreamWriter writer = new StreamWriter(stream, Encoding.Default); 
                  writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行 
                  writer.Close();//释放内存 
                  stream.Close();//释放内存 
              } 
          } 
          public void WriteTxtStop() 
          { 
              string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt"; 
              if (!File.Exists(filePath)) 
              { 
                  FileStream stream = new FileStream(filePath, FileMode.Create); 
                  StreamWriter writer = new StreamWriter(stream, Encoding.Default); 
                  writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行 
                  writer.Close();//释放内存 
                  stream.Close();//释放内存 
              } 
              else 
              { 
                  FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖 
                  StreamWriter writer = new StreamWriter(stream, Encoding.Default); 
                  writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行 
                  writer.Close();//释放内存 
                  stream.Close();//释放内存 
              } 
          } 
      } 
  安装和卸载windows服务 TopShelfService.exe install   #安装Windows服务 TopShelfService.exe uninstall #卸载Windows服务。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号