• 使用Topshelf创建Windows服务


    Topshelf是一个开源的跨平台的宿主服务框架,只需要几行代码就可以构建一个很方便使用的windows服务。

    首先安装nuget包 Topshelf。

    创建一个.net core控制台程序

     1  static void Main(string[] args)
     2  {
     3             #region 容器注入
     4             var services = new ServiceCollection();
     5             var assembly = System.Runtime.Loader.AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("EasyCard.Wechat.MsgTemplateRepository"));
     6             //加载以Repository后缀的业务类
     7             var diEntities = assembly.GetExportedTypes().Where(w => w.Name.EndsWith("Repository"));
     8             diEntities.ToList().ForEach(f =>
     9             {
    10                 if (f.IsInterface) return;
    11                 var interface1 = f.GetInterface("I" + f.Name);
    12                 services.AddScoped(interface1, f);
    13             });
    14             services.AddScoped(typeof(ServiceRunner));
    15             var serviceProvider = services.BuildServiceProvider(); 
    16             #endregion
    17             #region 盛派注册
    18             var configBuilder = new ConfigurationBuilder();
    19             var config = configBuilder.Build();
    20             var senparcSetting = new SenparcSetting();
    21             var senparcWeixinSetting = new SenparcWeixinSetting();
    22             services.AddMemoryCache();//使用本地缓存必须添加
    23             services.AddSenparcGlobalServices(config);//Senparc.CO2NET 全局注册
    24             // 启动 CO2NET 全局注册,必须!
    25             IRegisterService register = RegisterService.Start(senparcSetting).UseSenparcGlobal();
    26             register.UseSenparcWeixin(senparcWeixinSetting, senparcSetting);
    27             #endregion
    28             #region topshelf
    29             HostFactory.Run(x =>
    30             {
    31                 x.Service<ServiceRunner>(s =>                      
    32                 {
    33                     s.ConstructUsing(name => serviceProvider.GetService<ServiceRunner>());
    34                     s.WhenStarted(tc => tc.Start());
    35                     s.WhenStopped(tc => tc.Stop());
    36                 }
    37                     );
    38                 x.RunAsLocalSystem();
    39                 x.EnablePauseAndContinue();
    40                 x.SetDescription("QuartzWechatMsg_");        //安装服务后,服务的描述
    41                 x.SetDisplayName("QuartzWechatMsg");                       //显示名称
    42                 x.SetServiceName("QuartzWechatMsg");                       //服务名称
    43             });
    44             #endregion
    45             Console.ReadLine();
    46  }
     1  public class ServiceRunner 
     2 {
     3         public ServiceRunner()
     4         {
     5         }
     6 
     7         public void Start()
     8         {
     9             Log4Util.Info("消息发送服务已启动");
    10             //要执行的任务逻辑
    11         }
    12 
    13         public void Stop()
    14         {
    15             Log4Util.Info("消息发送服务已关闭");
    16         }
    17 }        

      这样一个简单的Windows服务就开发完了,接下来只需要一些简单的配置即可。

      安装:*.exe install
      启动:*.exe start
      卸载:*.exe uninstall
     
      值得一提的是,.net core 默认情况下,是不会生成 .exe程序的,需要在项目上右键编辑xxx.csproj,添加一行
     <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
      </PropertyGroup>

    重新生成解决方案,即可在根目录下发现一个 win10-x64文件夹,exe就生成在该文件夹内。

  • 相关阅读:
    MongoDB 集合上限说明
    MongoDB mtools-你可能没用过的mongodb神器(转载)
    Redis 你知道 Redis 的字符串是怎么实现的吗?(转载)
    Mongoimport 导数据自动去重
    MongoDB 数据类型
    MongoDB 数据类型整理
    MongoDB mongoimport 时间格式处理
    MongoDB 空值数组查询
    MongoDB WiredTiger 存储引擎cache_pool设计(转载)
    MongoDB运维实战lsm降低Disk Lantency(转载)
  • 原文地址:https://www.cnblogs.com/jasonbourne3/p/11101264.html
Copyright © 2020-2023  润新知