Topshelf使用.net控制台创建服务

川长思鸟来 2023-01-23 09:58 103阅读 0赞

目录

  • Topshelf
  • 安装Topshelf包
  • 代码如下,简单粗暴
  • 卸载服务
  • 安装服务

Topshelf

讨厌创建.net 服务时的窗体怎么办?讨厌调试.net服务怎么办?调试.net服务还要自己建控制台怎么办?
Topshelf 它来了!!!
Topshelf 是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
使用Topshelf可以非常方便的将一个C#控制台程序部署成为一个Windows Service,使用它可以很方便的构建跨平台服务寄主,而在调试时直接以控制台的形式运行即可,非常方便。
TopShelf 安装不需要依赖 .net framework 框架中的 InstallUtil.exe 工具

安装Topshelf包

在这里插入图片描述

代码如下,简单粗暴

记得自己创建log文件夹

  1. namespace TopShelfService
  2. {
  3. public class Program
  4. {
  5. public static void Main(string[] args)
  6. {
  7. HostFactory.Run(x =>
  8. {
  9. x.UseAssemblyInfoForServiceInfo();
  10. x.Service<WriteTxtClass>(w =>
  11. {
  12. w.ConstructUsing(name => new WriteTxtClass()); //使用 WriteTxtClass实体
  13. w.WhenStarted(tc => tc.WriteTxtStart()); //开始服务触发 WriteTxtStart 函数
  14. w.WhenStopped(tc => tc.WriteTxtStop()); //结束服务触发 WriteTxtStop 函数
  15. });
  16. x.SetServiceName("TopShelfService1"); //服务名
  17. x.SetDisplayName("TopShelfService1");//服务显示名称
  18. x.SetInstanceName("TopShelfService1"); //服务显示名称后面的描叙
  19. x.SetDescription("TopShelfService1 is Test Services"); // 服务描叙
  20. x.RunAsLocalSystem();
  21. x.StartAutomatically();
  22. });
  23. //Console.WriteLine("Hello World!");
  24. }
  25. public class WriteTxtClass
  26. {
  27. public void WriteTxtStart()
  28. {
  29. try
  30. {
  31. string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt";
  32. if (!File.Exists(filePath))
  33. {
  34. FileStream stream = new FileStream(filePath, FileMode.Create);
  35. StreamWriter writer = new StreamWriter(stream, Encoding.Default);
  36. writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行
  37. writer.Close();//释放内存
  38. stream.Close();//释放内存
  39. }
  40. else
  41. {
  42. FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖
  43. StreamWriter writer = new StreamWriter(stream, Encoding.Default);
  44. writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行
  45. writer.Close();//释放内存
  46. stream.Close();//释放内存
  47. }
  48. }
  49. catch (Exception ex)
  50. {
  51. throw;
  52. }
  53. }
  54. public void WriteTxtStop()
  55. {
  56. try
  57. {
  58. string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt";
  59. if (!File.Exists(filePath))
  60. {
  61. FileStream stream = new FileStream(filePath, FileMode.Create);
  62. StreamWriter writer = new StreamWriter(stream, Encoding.Default);
  63. writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行
  64. writer.Close();//释放内存
  65. stream.Close();//释放内存
  66. }
  67. else
  68. {
  69. FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖
  70. StreamWriter writer = new StreamWriter(stream, Encoding.Default);
  71. writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行
  72. writer.Close();//释放内存
  73. stream.Close();//释放内存
  74. }
  75. }
  76. catch (Exception ex)
  77. {
  78. throw;
  79. }
  80. }
  81. }
  82. }
  83. }

卸载服务

用管理员启动控制台,在项目目录下运行以下代码

TopShelfService.exe uninstall
在这里插入图片描述

安装服务

用管理员启动控制台,在项目目录下运行以下代码
TopShelfService.exe install
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读