不知道大家有没有和小编一样,很多时候想将自己的一些应用转为服务运行,比如一些控制台应用或者.NET Core应用,但是又不想重新编码,把他们转为服务,本文将给大家提供些我使用过的方法,并提供一个基于NET8 AOT编译的辅助项目的封装工具构建方法,快来看看吧。点我✨Star
我的快速开发框架项目
先介绍下我的基于.NET 8的快速开发框架Simple Framework,旨在简化开发流程,减少学习成本。框架特点包括基于.NET 8、少用第三方库、基本授权鉴权、CRUD实现和后台管理前端。规划使用了NLog、Redis、Json库等,并支持多数据库结构。框架包含基础库、Web项目扩展库、EFCore扩展库、代码生成器和定时任务模块,并提供了一套基于vue2 element服务器托管网ui前端页面框架,以提高开发效率和灵活性,发布以来收到了很多朋友的喜欢,本文的封装工具也是朋友的建议下撸出来的,快去看看吧。
把应用封装为服务的常用方式 WinSW 和 NSSM
WinSW(Windows Service Wrapper)和 NSSM(Non-Sucking Service Manager)都是流行的开源工具,用于将任何可执行文件包装为Windows服务。
尽管它们的目标相同,但它们在设计、配置和功能方面有所不同。
以下是两者之间一些核心差异的概述:
- 设计理念:
WinSW 使用XML文件作为服务配置,由.NET框架支持,这意味着它需要.NET环境来运行。
NSSM 则不依赖.NET框架,它是使用C++编写的,并且包含了一个用户友好的GUI进行服务配置。 - 配置:
WinSW 需要一个XML配置文件,其中指定服务的详细信息,这可能对那些习惯于XML格式的用户更方便。
NSSM 提供了一个命令行界面,用于安装、删除、启动和管理服务。它还附带了一个GUI,允许用户通过图形界面配置服务。 - 特性和功能:
WinSW 支持日志记录、下载、服务失败操作等。它允许服务自我更新,也支持延迟的自动启动。
NSSM 的特点是轻量,易于使用,也支持日志记录,可以自动重启失败的服务,并且能够处理stdout和stderr输出。 - 易用性:
NSSM 因其简单的GUI而受到一些用户的青睐,允许快速安装和配置服务。
WinSW 需要用户编辑XML文件,这可能对一些用户来说不那么直观,但对于熟悉该格式的用户则非常有用。 - 依赖性:
WinSW 依赖于.NET环境,所以在没有安装.NET的系统上不能使用。
NSSM 没有额外的依赖,它可以在所有现代Windows系统上直接运行。 - 社区和支持:
WinSW 和 NSSM 都有活跃的社区,但他们的更新频率和社区支持可能会有所不同。
在选择使用哪一个时,你需要根据你的特定需求、你的技术偏好以及你所在的环境来决定。例如,如果你已经在使用.NET环境,并且希望有一个详细的配置文件,那么WinSW可能是更好的选择。而如果你希望在没有.NET环境的系统上运行,或者你喜欢使用图形界面进行配置,那么NSSM可能更适合你。
NSSM注册服务后,后台会常驻一个NSSM的程序文件,所以我选择了使用WinSW来做这个辅助工具。
封装构想
查对了WinSW的文档,他是基于xml的配置来执行不同的命令,来处理不同的服务操作,那我们可以写个程序,来封装xml配置文件的生成和指令的执行,这样一来你处理你服务器托管网的服务应用就只需要双击你的辅助程序,便可以方便的启停你的应用程序,.NET8刚好可以做AOT编译的项目,那就用它来做这个工具吧,也不用安装环境了,搞起。
项目构建
新建一个控制台应用,基于.NET8 启用AOT编译
-
建一个model,来存储转为xml的配置文件数据
-
把方法都封装到一个Helper类中
封装常用的 WinSW 命令
-
封装检查、读取、生成配置文件的方法
-
封装启动CMD的方法
-
最后封装指令菜单
看看运行效果
我的API项目执行文件是 Simple.WebHost.exe
- 双击我的辅助项目编译文件 Simple.RunService.exe 配置指令
查看1. 生成的xml文档
小试一刀1. ,注册并启动服务
简单吧,简单的封装,配置一次,以后更新啥的,直接双击运行辅助项目输入个数字就搞定了
看看编译的辅助工具的文件 2M还行吧,不用安装环境哦 注意X64环境使用哦
点我✨Star
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 【Android】线程下载资源保证资源到位采用了 OkHttp的三方网络下载 & 文件缓存策略
背景 使用 SVGA的三方的url播放方式会比较慢,至少延迟3s以上才会出现svga效果,所以改变策略:将线上的svga全部下载到本地进行播放,那么就得将采用网络缓存的方式实现效果。 实现 那么就得实现以下几点: 初次下载 缓存 判重下载 下载的地址就放在这里…