不知道大家有没有和小编一样,很多时候想将自己的一些应用转为服务运行,比如一些控制台应用或者.NET Core应用,但是又不想重新编码,把他们转为服务,本文将给大家提供些我使用过的方法,并提供一个基于NET8 AOT编译的辅助项目的封装工具构建方法,快来看看吧。点我Star

我的快速开发框架项目

先介绍下我的基于.NET 8的快速开发框架Simple Framework,旨在简化开发流程,减少学习成本。框架特点包括基于.NET 8、少用第三方库、基本授权鉴权、CRUD实现和后台管理前端。规划使用了NLog、Redis、Json库等,并支持多数据库结构。框架包含基础库、Web项目扩展库、EFCore扩展库、代码生成器和定时任务模块,并提供了一套基于vue2 elementui前端页面框架,以提高开发效率和灵活性,发布以来收到了很多朋友的喜欢,本文的封装工具也是朋友的建议下撸出来的,快去看看吧。

把应用封装为服务的常用方式 WinSW 和 NSSM

WinSW(Windows Service Wrapper)和 NSSM(Non-Sucking Service Manager)都是流行的开源工具,用于将任何可执行文件包装为Windows服务。

尽管它们的目标相同,但它们在设计、配置和功能方面有所不同。

以下是两者之间一些核心差异的概述:

  1. 设计理念:

    WinSW 使用XML文件作为服务配置,由.NET框架支持,这意味着它需要.NET环境来运行。

    NSSM 则不依赖.NET框架,它是使用C++编写的,并且包含了一个用户友好的GUI进行服务配置。
  2. 配置:

    WinSW 需要一个XML配置文件,其中指定服务的详细信息,这可能对那些习惯于XML格式的用户更方便。

    NSSM 提供了一个命令行界面,用于安装、删除、启动和管理服务。它还附带了一个GUI,允许用户通过图形界面配置服务。
  3. 特性和功能:

    WinSW 支持日志记录、下载、服务失败操作等。它允许服务自我更新,也支持延迟的自动启动。

    NSSM 的特点是轻量,易于使用,也支持日志记录,可以自动重启失败的服务,并且能够处理stdout和stderr输出。
  4. 易用性:

    NSSM 因其简单的GUI而受到一些用户的青睐,允许快速安装和配置服务。

    WinSW 需要用户编辑XML文件,这可能对一些用户来说不那么直观,但对于熟悉该格式的用户则非常有用。
  5. 依赖性:

    WinSW 依赖于.NET环境,所以在没有安装.NET的系统上不能使用。

    NSSM 没有额外的依赖,它可以在所有现代Windows系统上直接运行。
  6. 社区和支持:

    WinSW 和 NSSM 都有活跃的社区,但他们的更新频率和社区支持可能会有所不同。

    在选择使用哪一个时,你需要根据你的特定需求、你的技术偏好以及你所在的环境来决定。例如,如果你已经在使用.NET环境,并且希望有一个详细的配置文件,那么WinSW可能是更好的选择。而如果你希望在没有.NET环境的系统上运行,或者你喜欢使用图形界面进行配置,那么NSSM可能更适合你。

NSSM注册服务后,后台会常驻一个NSSM的程序文件,所以我选择了使用WinSW来做这个辅助工具。

封装构想

查对了WinSW的文档,他是基于xml的配置来执行不同的命令,来处理不同的服务操作,那我们可以写个程序,来封装xml配置文件的生成和指令的执行,这样一来你处理你的服务应用就只需要双击你的辅助程序,便可以方便的启停你的应用程序,.NET8刚好可以做AOT编译的项目,那就用它来做这个工具吧,也不用安装环境了,搞起。

项目构建

新建一个控制台应用,基于.NET8 启用AOT编译

  1. 建一个model,来存储转为xml的配置文件数据

  2. 把方法都封装到一个Helper类中

    封装常用的 WinSW 命令

  3. 封装检查、读取、生成配置文件的方法

  4. 封装启动CMD的方法

  5. 最后封装指令菜单

看看运行效果

我的API项目执行文件是 Simple.WebHost.exe

  1. 双击我的辅助项目编译文件 Simple.RunService.exe 配置指令

查看1. 生成的xml文档

小试一刀1. ,注册并启动服务

简单吧,简单的封装,配置一次,以后更新啥的,直接双击运行辅助项目输入个数字就搞定了

看看编译的辅助工具的文件 2M还行吧,不用安装环境哦 注意X64环境使用哦

点我Star

一个NET8 AOT编译的辅助项目,让你的任何可执行应用快速部署为服务的更多相关文章

  1. ios-实现项目在开发、测试、正式环境快速部署

    快速部署:简单的来说,就是不用更改开发.测试.正式环境下的 url ,来实现在同一台测试手机快速部署三种项目状态. Bundle ID一样只会出现一个app:不一样会出现三个app: 具体步骤: 一. ...

  2. .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务

    一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...

  3. 往android主项目中添加辅助项目

    一个较大的工程往往需要多个项目组成,便于更好的并行开发和管理,但最后还是要合到一起来发布.那如何往主项目里添加其他辅助项目呢? 通常的做法是将辅助项目打包成jar包,像库一样导入到主项目,但是如果我们 ...

  4. 知乎问题之:.NET AOT编译后能替代C++吗?

    标题上的Native库是指:Native分为静态库( 作者:nscript链接:https://www.zhihu.com/question/536903224/answer/2522626086 ( ...

  5. dotnet7 aot编译实战

    0 起因 这段日子看到dotnet7-rc1发布,我对NativeAot功能比较感兴趣,如果aot成功,这意味了我们的dotnet程序在防破解的上直接指数级提高.我随手使用asp.netcore-7. ...

  6. 【菜鸟玩Linux开发】在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  7. 【转载】在Linux中使用VS Code编译调试C++项目

    原文:在Linux中使用VS Code编译调试C++项目 最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS ...

  8. 在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  9. 使用Maven将Hadoop2.2.0源码编译成Eclipse项目

    编译环境: OS:RHEL 6.3 x64 Maven:3.2.1 Eclipse:Juno SR2 Linux x64 libprotoc:2.5.0 JDK:1.7.0_51 x64 步骤: 1. ...

  10. 项目androidAnt编译打包Android项目

    时间紧张,先记一笔,后续优化与完善. Ant编译打包Android项目 在Eclipse中对Android项目停止编译和打包如果项目比较大的话会比较慢,所以改为Ant工具来停止编译和打包 Ant环境配 ...

随机推荐

  1. 连续下雨天,.net开发者如何预防流感

    最近连续下了3天雨,天气变化大,很容易引发感冒咳嗽等疾病.对于.NET技术开发人员来说,如何保持身体健康,保证工作效率是一个很重要的问题. 首先,我们需要注意保持室内空气流通,避免长时间处于封闭的空间 ...

  2. quarkus依赖注入之十一:拦截器高级特性上篇(属性设置和重复使用)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...

  3. AVR汇编(四):数据传送指令

    AVR汇编(四):数据传送指令 AVR指令主要分为五类:算术和逻辑指令.分支指令.位操作指令.数据传送指令.MCU控制指令,今天我们先来认识其中最常用的数据传送指令. 汇编程序的编写.编译和调试 学习 ...

  4. dBeaver操作iotdb并实现导入和导出

    1.windows下操作iotdb,现在官网下载相关的iotdb包 官网地址:https://archive.apache.org/dist/iotdb/   一般建议下载 -all的  2.打开db ...

  5. H.265+SRS6.0服务器部署

    H.265+SRS6.0服务器部署 SRS从6.0开始,全面支持H.265,包括RTMP.FLV.HLS.GB28181.WebRTC等等.具体的服务器部署及H.265推流步骤如下. 1. SRS 要 ...

  6. .NET应用多语言-葡萄牙语软件,如何处理本地化,特别是数字的转换和计算

    在葡萄牙语软件中,数字本地化通常涉及小数点和千位分隔符的使用.在葡萄牙语中,小数点用","表示,而不是英语中使用的".".千位分隔符通常是一个空格或一个点. 例 ...

  7. Vue3+vite路由配置优化(自动化导入)

    今天在维护优化公司中台项目时,发现路由的文件配置非常多非常乱,只要只中大型项目,都会进入很多的路由页面,规范一点的公司还会吧路由进行模块化导入,但是依然存在很多文件夹的和手动导入的问题. 于是我想到了 ...

  8. 图解 LeetCode 算法汇总——二分查找

    二分查找(Binary Search)是一种在有序数组中查找特定元素的高效算法.它的基本思想是将目标值与数组中间的元素进行比较,如果目标值小于中间元素,则在数组的左半部分继续查找,否则在右半部分查找, ...

  9. 临时表、视图与系统函数_Lab2

    MySQL数据库操作 Lab1.md body { font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSys ...

  10. FreeRTOS 操作系统

    FreeRTOS操作系统 01 FreeRTOS 的定义和概述 定义:FreeRTOS(Free-Real-Time Operating System)是一个开源的实时操作系统内核,专门为嵌入式系统设 ...